Udostępnij za pośrednictwem


SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

Steruje zachowaniem folderu Transact-SQL Instrukcja zatwierdzanie TRANSACTION. Wartość domyślna tego ustawienia jest wyłączona.Oznacza to, że serwer nie zostanie zamknięte kursory, gdy przekazać transakcji.

Topic link iconKonwencje składni języka Transact-SQL

SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }

Remarks

Podczas CURSOR_CLOSE_ON_COMMIT zestaw jest włączone, to ustawienie powoduje zamknięcie wszystkich otwartych kursorów na zatwierdzanie lub wycofywanie zgodne z ISO.Gdy CURSOR_CLOSE_ON_COMMIT zestaw jest wyłączona, kursor nie jest zamknięty, gdy transakcja jest zatwierdzona.

Uwaga

zestaw CURSOR_CLOSE_ON_COMMIT on nie spowoduje zamknięcie otwartych kursorów na wycofywanie wycofywanie po rozliczeniu savepoint_name instrukcja SAVE TRANSACTION.

Gdy CURSOR_CLOSE_ON_COMMIT zestaw jest wyłączona, instrukcja ROLLBACK powoduje zamknięcie tylko otwartych kursorów asynchronicznych, które nie są całkowicie wypełniony.STATYCZNY lub NIEWRAŻLIWE kursory, które zostały otwarte po zostały wprowadzone zmiany nie są już będzie odzwierciedlać stanu danych, jeśli zmiany są przywracane.

zestaw CURSOR_CLOSE_ON_COMMIT kontroluje samo jak opcja CURSOR_CLOSE_ON_COMMIT bazy danych.Jeśli jest CURSOR_CLOSE_ON_COMMIT zestaw na ON lub OFF, że zestaw ting jest używany w danym połączeniu.Jeśli nie określono CURSOR_CLOSE_ON_COMMIT zestaw, wartość w is_cursor_close_on_commit_on kolumnasys.Databases powoduje zastosowanie widoku katalogu.

The SQL Server Native klient OLE DB dostawca for SQL Server and the SQL Server Native klient ODBC driver both zestaw CURSOR_CLOSE_ON_COMMIT to OFF when they connect. Biblioteki DB nie ustawia automatycznie wartość CURSOR_CLOSE_ON_COMMIT.

zestaw ANSI_DEFAULTS jest włączone, ma włączoną CURSOR_CLOSE_ON_COMMIT zestaw.

Ustawiono zestaw CURSOR_CLOSE_ON_COMMIT na wykonać lub uruchomić czas, a nie w czasie analizowania.

Uprawnienia

Członkostwo w grupie wymaga publiczne roli.

Przykłady

W poniższym przykładzie określa kursor w ramach transakcji i próbuje użyć go po transakcja została zatwierdzona.

-- SET CURSOR_CLOSE_ON_COMMIT
-------------------------------------------------------------------------------
SET NOCOUNT ON

CREATE TABLE t1 (
   a INT
)
GO 

INSERT INTO t1 
VALUES (1)
INSERT INTO t1 
VALUES (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