適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric の SQL データベース
Transact-SQL COMMIT TRANSACTION ステートメントの動作を制御します。 この設定の既定値は OFF です。 つまり、トランザクションのコミット時、サーバーでカーソルはクローズされません。
構文
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }
解説
SET CURSOR_CLOSE_ON_COMMITがオンのとき、この設定はISOに準拠してコミットまたはロールバック時に開いているカーソルを閉じます。 SET CURSOR_CLOSE_ON_COMMITがOFFの場合、トランザクションがコミットしてもカーソルは閉じられません。
Note
SET CURSOR_CLOSE_ON_COMMIT TO ONは、SAVE TRANSACTION 文のsavepoint_nameにロールバックが適用された際、TO ONは開いているカーソルを閉じません。
SET CURSOR_CLOSE_ON_COMMITがOFFの場合、ROLLBACK文は完全に入力されていない非同期カーソルのみを閉じます。 変更が加えられた後でオープンされた STATIC カーソルまたは INSENSITIVE カーソルは、変更がロールバックされた場合、データの状態を反映しなくなります。
SET SET CURSOR_CLOSE_ON_COMMIT CURSOR_CLOSE_ON_COMMITデータベースオプションと同じ動作を制御します。 CURSOR_CLOSE_ON_COMMITがONまたはOFFに設定されている場合、その設定が接続で使われます。 SET CURSOR_CLOSE_ON_COMMITが指定されていない場合は、sys.databasesのカタログビューのis_cursor_close_on_commit_on列の値が適用されます。
SQL ServerネイティブクライアントのOLE DBプロバイダー for SQL ServerとSQL ServerネイティブクライアントのODBCドライバーは、接続時にCURSOR_CLOSE_ON_COMMITをオフに設定しています。 DB-Library は自動的に CURSOR_CLOSE_ON_COMMIT 値を設定するわけではありません。
SET SET ANSI_DEFAULTSがオンの場合、SETSET CURSOR_CLOSE_ON_COMMITが有効になります。
SET CURSOR_CLOSE_ON_COMMITの設定は、解析時ではなく実行時に設定されます。
この設定の現在の設定を表示するには、次のクエリを実行します。
DECLARE @CURSOR_CLOSE VARCHAR(3) = 'OFF';
IF ( (4 & @@OPTIONS) = 4 ) SET @CURSOR_CLOSE = 'ON';
SELECT @CURSOR_CLOSE AS CURSOR_CLOSE_ON_COMMIT;
アクセス許可
ロール public のメンバーシップが必要です。
例
次の例では、トランザクションの内部でカーソルを定義し、トランザクションがコミットされた後でそのカーソルの使用を試みます。
-- SET CURSOR_CLOSE_ON_COMMIT
-------------------------------------------------------------------------------
SET NOCOUNT ON;
CREATE TABLE t1 (a INT);
GO
INSERT INTO t1
VALUES (1), (2);
GO
PRINT '-- SET CURSOR_CLOSE_ON_COMMIT ON';
GO
SET CURSOR_CLOSE_ON_COMMIT ON;
GO
PRINT '-- BEGIN TRAN';
BEGIN TRAN;
PRINT '-- Declare and open cursor';
DECLARE testcursor CURSOR FOR
SELECT a FROM t1;
OPEN testcursor;
PRINT '-- Commit tran';
COMMIT TRAN;
PRINT '-- Try to use cursor';
FETCH NEXT FROM testcursor;
CLOSE testcursor;
DEALLOCATE testcursor;
GO
PRINT '-- SET CURSOR_CLOSE_ON_COMMIT OFF';
GO
SET CURSOR_CLOSE_ON_COMMIT OFF;
GO
PRINT '-- BEGIN TRAN';
BEGIN TRAN;
PRINT '-- Declare and open cursor';
DECLARE testcursor CURSOR FOR
SELECT a FROM t1;
OPEN testcursor;
PRINT '-- Commit tran';
COMMIT TRAN;
PRINT '-- Try to use cursor';
FETCH NEXT FROM testcursor;
CLOSE testcursor;
DEALLOCATE testcursor;
GO
DROP TABLE t1;
GO
参照
ALTER DATABASE (Transact-SQL)
トランザクション開始(Transact-SQL)
閉じる(Transact-SQL)
コミット トランザクション (Transact-SQL)
ロールバックトランザクション(Transact-SQL)
SET ステートメント (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)