OPEN (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Transact-SQL サーバー カーソルをオープンし、DECLARE CURSOR または SET cursor_variable ステートメントで指定される Transact-SQL ステートメントを実行することで、カーソルを生成します。

Transact-SQL 構文表記規則

構文

OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }  

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

GLOBAL
cursor_name でグローバル カーソルを参照することを指定します。

cursor_name
宣言済みのカーソルの名前を指定します。 cursor_name という名前のグローバル カーソルとローカル カーソルの両方がある場合、GLOBAL を指定すると、cursor_name はグローバル カーソルを参照します。GLOBAL を指定しないと、cursor_name はローカル カーソルを参照します。

cursor_variable_name
カーソルを参照するカーソル変数の名前を指定します。

解説

INSENSITIVE または STATIC オプションと共にカーソルが宣言されている場合、OPEN を実行すると結果セットを格納する一時テーブルが作成されます。 結果セット内の行のサイズが SQL Server テーブルの最大行サイズを超えると、OPEN は失敗します。 KEYSET オプションと共にカーソルが宣言されている場合、OPEN を実行するとキーセットを格納する一時テーブルが作成されます。 一時テーブルは tempdb に格納されます。

カーソルをオープンした後、最後にオープンしたカーソル内の該当する行の数を受け取るには、@@CURSOR_ROWS 関数を使用します。

Note

SQL Server では、キーセット ドリブン カーソルおよび静的 Transact-SQL カーソルの非同期の作成はサポートしていません。 OPEN または FETCH などの Transact-SQL カーソル操作はバッチで行われます。したがって、Transact-SQL カーソルを非同期に生成する必要はありません。 SQL Server 各カーソル操作におけるクライアントのラウンド トリップのため、待機時間が少ない OPEN が問題になるような非同期キーセット ドリブン カーソルまたは静的 API (アプリケーション プログラミング インターフェイス) サーバー カーソルは、 で引き続きサポートされます。

次の例では、カーソルをオープンし、すべての行をフェッチします。

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)