Sql server 这是一个循环吗?

Sql server 这是一个循环吗?,sql-server,tsql,db2,cursor,Sql Server,Tsql,Db2,Cursor,不管命运如何,我正在努力将DB2存储过程转换为SQL Server存储过程 在DB2中有一件事我不能完全理解,那就是游标1。通过查看和阅读一些文档,它似乎只是一个select语句 -- DB2 stored procedure code declare entity_cursor cursor with return for select * from TableName; ... --a lot more cursors like above, and some other code ...

不管命运如何,我正在努力将DB2存储过程转换为SQL Server存储过程

在DB2中有一件事我不能完全理解,那就是游标1。通过查看和阅读一些文档,它似乎只是一个select语句

-- DB2 stored procedure code
declare entity_cursor cursor with return for
select *
from TableName;

...
--a lot more cursors like above, and some other code
...

open entity_cursor;
问题

我的假设2正确吗?这只是一个select语句,在光标打开时实际返回一个结果集? 如果在光标打开3之前发生错误,SP是否会返回实体_光标的空白结果集? 1:我知道SQL Server,它们通常用于逐行执行操作。 2:基于阅读DB2文档和我的知识和智慧。
3:不幸的是,我无法在DB2中完全测试存储过程。

对于您的第一个问题:如注释中所述,打开游标不会生成结果集,而只是一个指向结构的指针,允许您使用FETCH语句或等效语句访问结果集。此外,当您开始获取记录时,结果集甚至可能没有完全具体化——这取决于实际的查询和各种游标选项


关于第二个问题:如果您的存储过程在打开游标之前返回(正常情况下或其他情况下),它的调用者将得到一个未初始化的游标结构,当您试图访问它时,它将导致异常,而不是一个空的结果集。

第一个游标不应该常用,只有在没有其他选项时才使用,因为它们在设计上非常慢,占用的资源太多。光标在某种意义上是一个循环。使用select语句加载光标,select加载光标后,它将逐行遍历光标。我确信这个错误取决于你如何处理错误。光标本身并不是一个循环。它是指向行/行集的指针,因为RBAR通常不好,大多数游标定义为一次返回一个记录块。仅仅打开游标并不会给您任何行—您必须从中获取数据。若要使其成为循环,则必须获取下一个。。。在光标不再报告行/行集之前,匹配。SQL Server功能没有区别,只是SQL Server似乎不允许行块。@在DB2中,游标用于显式定义返回到客户端的结果集。MS SQL仅通过SP主体中的一个SELECT隐式执行此操作。