Udostępnij za pomocą


ZESTAW CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

Kontroluje zachowanie Transact-SQL COMMIT TRANSACTION. Domyślna wartość tego ustawienia to WYŁĄCZONE. Oznacza to, że serwer nie zamyka kursorów podczas zatwierdzania transakcji.

Transact-SQL konwencje składni

Składnia

  
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }  

Uwagi

Gdy SET CURSOR_CLOSE_ON_COMMIT jest WŁĄCZONY, to ustawienie zamyka wszystkie otwarte kursory podczas commit lub rollback zgodnie z normą ISO. Gdy USTAW CURSOR_CLOSE_ON_COMMIT jest WYŁĄCZONE, kursor nie jest zamykany po zatwierdzeniu transakcji.

Uwaga / Notatka

USTAW CURSOR_CLOSE_ON_COMMIT na ON nie zamyka otwartych kursorów przy cofaniu, gdy cofnięcie zostanie zastosowane do savepoint_name z instrukcji SAVE TRANSACTION.

Gdy SET CURSOR_CLOSE_ON_COMMIT jest WYŁĄCZONE, instrukcja ROLLBACK zamyka tylko otwarte kursory asynchroniczne, które nie są w pełni wypełnione. STATYCZNE lub NIECZUŁE kursory, które zostały otwarte po dokonaniu modyfikacji, nie będą już odzwierciedlać stanu danych, jeśli modyfikacje zostaną cofnięte.

SET CURSOR_CLOSE_ON_COMMIT kontroluje takie samo zachowanie jak opcja CURSOR_CLOSE_ON_COMMIT bazy danych. Jeśli CURSOR_CLOSE_ON_COMMIT ustawione na ON lub OFF, to ustawienie jest używane na połączeniu. Jeśli SET CURSOR_CLOSE_ON_COMMIT nie został określony, wartość w kolumnie is_cursor_close_on_commit_on w widoku katalogu sys.databases ma zastosowanie.

SQL Server Native Client OLE DB Provider for SQL Server oraz SQL Server Native Client ODBC sterownik ustawiają CURSOR_CLOSE_ON_COMMIT na OFF podczas połączenia. DB-Library nie ustawia automatycznie wartości CURSOR_CLOSE_ON_COMMIT.

Gdy SET ANSI_DEFAULTS jest włączone, SET CURSOR_CLOSE_ON_COMMIT jest włączone.

Ustawienie SET CURSOR_CLOSE_ON_COMMIT jest ustawiane w czasie wykonywania lub działania, a nie w czasie parsowania.

Aby zobaczyć aktualne ustawienie dla tego ustawienia, uruchom następujące zapytanie.

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

Permissions

Wymaga członkostwa w publicznej roli .

Przykłady

Poniższy przykład definiuje kursor w transakcji i próbuje go użyć po jej zatwierdzeniu.

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

Zobacz też

BAZA DANYCH ALTER (Transact-SQL)
ROZPOCZNIJ TRANSAKCJĘ (Transact-SQL)
ZAMKNIJ (Transact-SQL)
TRANSAKCJA COMMIT (Transact-SQL)
WYCOFYWANIA TRANSAKCJI (Transact-SQL)
INSTRUKCJE SET (Transact-SQL)
ZESTAW ANSI_DEFAULTS (Transact-SQL)