OPEN (Transact-SQL)
打开 Transact-SQL 服务器游标,然后通过执行在 DECLARE CURSOR 或 SET cursor_variable 语句中指定的 Transact-SQL 语句填充游标。
语法
OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }
参数
GLOBAL
指定 cursor_name 是指全局游标。
cursor_name
已声明的游标的名称。如果全局游标和局部游标都使用 cursor_name 作为其名称,那么如果指定了 GLOBAL,则 cursor_name 指的是全局游标;否则 cursor_name 指的是局部游标。
cursor_variable_name
游标变量的名称,该变量引用一个游标。
备注
如果使用 INSENSITIVE 或 STATIC 选项声明了游标,那么 OPEN 将创建一个临时表以保留结果集。如果结果集中任意行的大小超过 SQL Server 表的最大行大小,OPEN 将失败。如果使用 KEYSET 选项声明了游标,那么 OPEN 将创建一个临时表以保留键集。临时表存储在 tempdb 中。
打开游标后,可以使用 @@CURSOR_ROWS 函数在上次打开的游标中接收合格行的数目。
注意: |
---|
SQL Server 2005 不支持异步生成键集驱动或静态的 Transact-SQL 游标。Transact-SQL 游标操作(如 OPEN 或 FETCH)均为批处理,所以无需异步生成 Transact-SQL 游标。SQL Server 2005 继续支持异步键集驱动或静态的应用程序编程接口 (API) 服务器游标,其中,由于每个游标操作的客户端往返,低滞后时间 OPEN 是一个需要关注的问题。 |
示例
以下示例打开一个游标并提取所有的行。
DECLARE Employee_Cursor CURSOR FOR
SELECT LastName, FirstName
FROM AdventureWorks.HumanResources.vEmployee
WHERE LastName like 'B%';
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Employee_Cursor
END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
请参阅
参考
CLOSE (Transact-SQL)
@@CURSOR_ROWS (Transact-SQL)
DEALLOCATE (Transact-SQL)
DECLARE CURSOR (Transact-SQL)
FETCH (Transact-SQL)