SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database

Transact-SQLTransact-SQL COMMIT TRANSACTION ステートメントの動作を制御します。Controls the behavior of the Transact-SQLTransact-SQL COMMIT TRANSACTION statement. この設定の既定値は OFF です。The default value for this setting is OFF. つまり、トランザクションのコミット時、サーバーでカーソルはクローズされません。This means that the server will not close cursors when you commit a transaction.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

  
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }  

注意

SQL Server 2014 以前の Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

解説Remarks

SET CURSOR_CLOSE_ON_COMMIT が ON の場合、この設定では ISO に準拠し、コミット時またはロールバック時にオープン カーソルがすべてクローズされます。When SET CURSOR_CLOSE_ON_COMMIT is ON, this setting closes any open cursors on commit or rollback in compliance with ISO. SET CURSOR_CLOSE_ON_COMMIT が OFF の場合、トランザクションのコミット時にカーソルはクローズされません。When SET CURSOR_CLOSE_ON_COMMIT is OFF, the cursor is not closed when a transaction is committed.

注意

SAVE TRANSACTION ステートメントの savepoint_name にロールバックを適用した場合、SET CURSOR_CLOSE_ON_COMMIT を ON にすると、ロールバック時にオープンされているカーソルはクローズされます。SET CURSOR_CLOSE_ON_COMMIT to ON will not close open cursors on rollback when the rollback is applied to a savepoint_name from a SAVE TRANSACTION statement.

SET CURSOR_CLOSE_ON_COMMIT が OFF の場合には、ROLLBACK ステートメントによってクローズされるカーソルは完全には作成されていない非同期オープン カーソルだけです。When SET CURSOR_CLOSE_ON_COMMIT is OFF, a ROLLBACK statement closes only open asynchronous cursors that are not fully populated. 変更が加えられた後でオープンされた STATIC カーソルまたは INSENSITIVE カーソルは、変更がロールバックされた場合、データの状態を反映しなくなります。STATIC or INSENSITIVE cursors that were opened after modifications were made will no longer reflect the state of the data if the modifications are rolled back.

SET CURSOR_CLOSE_ON_COMMIT は、CURSOR_CLOSE_ON_COMMIT データベース オプションと同じ動作を制御します。SET CURSOR_CLOSE_ON_COMMIT controls the same behavior as the CURSOR_CLOSE_ON_COMMIT database option. CURSOR_CLOSE_ON_COMMIT が ON または OFF に設定されている場合、その設定は接続で使用されます。If CURSOR_CLOSE_ON_COMMIT is set to ON or OFF, that setting is used on the connection. SET CURSOR_CLOSE_ON_COMMIT が指定されていない場合は、sys.databases カタログ ビューにある is_cursor_close_on_commit_on 列の値が適用されます。If SET CURSOR_CLOSE_ON_COMMIT has not been specified, the value in the is_cursor_close_on_commit_on column in the sys.databases catalog view applies.

SQL ServerSQL Server Native Client OLE DB Provider for SQL ServerSQL ServerSQL ServerSQL Server Native Client ODBC ドライバーはどちらも、接続時に CURSOR_CLOSE_ON_COMMIT を OFF に設定します。The SQL ServerSQL Server Native Client OLE DB Provider for SQL ServerSQL Server and the SQL ServerSQL Server Native Client ODBC driver both set CURSOR_CLOSE_ON_COMMIT to OFF when they connect. DB-Library は CURSOR_CLOSE_ON_COMMIT の値を自動的に設定しません。DB-Library does not automatically set the CURSOR_CLOSE_ON_COMMIT value.

SET ANSI_DEFAULTS が ON の場合には、SET CURSOR_CLOSE_ON_COMMIT は有効になります。When SET ANSI_DEFAULTS is ON, SET CURSOR_CLOSE_ON_COMMIT is enabled.

SET CURSOR_CLOSE_ON_COMMIT は、解析時ではなく実行時に設定されます。The setting of SET CURSOR_CLOSE_ON_COMMIT is set at execute or run time and not at parse time.

この設定の現在の設定を表示するには、次のクエリを実行します。To view the current setting for this setting, run the following query.

DECLARE @CURSOR_CLOSE VARCHAR(3) = 'OFF';  
IF ( (4 & @@OPTIONS) = 4 ) SET @CURSOR_CLOSE = 'ON';  
SELECT @CURSOR_CLOSE AS CURSOR_CLOSE_ON_COMMIT;  

アクセス許可Permissions

ロール public のメンバーシップが必要です。Requires membership in the public role.

Examples

次の例では、トランザクションの内部でカーソルを定義し、トランザクションがコミットされた後でそのカーソルの使用を試みます。The following example defines a cursor in a transaction and attempts to use it after the transaction is committed.

-- 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  

参照See Also

ALTER DATABASE (Transact-SQL) ALTER DATABASE (Transact-SQL)
BEGIN TRANSACTION (Transact-SQL) BEGIN TRANSACTION (Transact-SQL)
CLOSE (Transact-SQL) CLOSE (Transact-SQL)
COMMIT TRANSACTION (Transact-SQL) COMMIT TRANSACTION (Transact-SQL)
ROLLBACK TRANSACTION (Transact-SQL) ROLLBACK TRANSACTION (Transact-SQL)
SET ステートメント (Transact-SQL) SET Statements (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)SET ANSI_DEFAULTS (Transact-SQL)