SET CURSOR_CLOSE_ON_COMMIT(Transact-SQL)
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance
Transact-SQL COMMIT TRANSACTION 문의 동작을 제어합니다. 이 설정의 기본값은 OFF입니다. 즉, 트랜잭션을 커밋할 때 서버가 커서를 닫지 않습니다.
구문
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)