OPEN (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

打开 Transact-SQL 服务器游标,然后通过执行在 DECLARE CURSOR 或 SET cursor_variable 语句中指定的 Transact-SQL 语句填充游标。

Transact-SQL 语法约定

语法

OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }  

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

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 不支持异步生成由键集驱动的或静态的 Transact-SQL 游标。 Transact-SQL 游标操作(如 OPEN 或 FETCH)均为批处理,所以无需异步生成 Transact-SQL 游标。 SQL Server 由于每个游标操作都需要进行客户端往返,因此继续支持异步的由键集驱动的或静态的应用程序编程接口 (API) 服务器游标,对于这些游标,OPEN 实现低延迟时间很重要。

示例

以下示例打开一个游标并提取所有的行。

DECLARE Employee_Cursor CURSOR FOR  
SELECT LastName, FirstName  
FROM AdventureWorks2022.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)