Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza 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)