다음을 통해 공유


SET CURSOR_CLOSE_ON_COMMIT(Transact-SQL)

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance

Transact-SQL COMMIT TRANSACTION 문의 동작을 제어합니다. 이 설정의 기본값은 OFF입니다. 즉, 트랜잭션을 커밋할 때 서버가 커서를 닫지 않습니다.

Transact-SQL 구문 표기 규칙

구문

  
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }  

설명

CURSOR_CLOSE_ON_COMMIT 옵션이 ON이면 ISO에 따라 커밋 또는 롤백될 때 열려 있는 모든 커서를 닫습니다. SET CURSOR_CLOSE_ON_COMMIT 옵션이 OFF이면 트랜잭션이 커밋될 때 커서가 닫히지 않습니다.

참고

SET CURSOR_CLOSE_ON_COMMIT 옵션이 ON이면 롤백이 SAVE TRANSACTION 문에서 savepoint_name에 적용될 때 롤백 시 열려 있는 커서를 닫지 않습니다.

SET CURSOR_CLOSE_ON_COMMIT 옵션이 OFF이면 ROLLBACK 문은 완전히 채워지지 않은 열려 있는 비동기 커서만 닫습니다. 수정 후 연 STATIC 또는 INSENSITIVE 커서는 수정 사항이 롤백되는 경우의 데이터 상태를 더 이상 반영하지 않습니다.

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 Native Client OLE DB Provider for SQL Server와 SQL Server Native Client ODBC 드라이버는 둘 다 연결될 때 CURSOR_CLOSE_ON_COMMIT 옵션을 OFF로 설정합니다. DB-Library는 CURSOR_CLOSE_ON_COMMIT 값을 자동으로 설정하지 않습니다.

SET ANSI_DEFAULTS 옵션이 ON이면 SET 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)
BEGIN TRANSACTION(Transact-SQL)
CLOSE(Transact-SQL)
COMMIT TRANSACTION(Transact-SQL)
ROLLBACK TRANSACTION(Transact-SQL)
SET 문(Transact-SQL)
SET ANSI_DEFAULTS(Transact-SQL)