Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Verwaltete Azure SQL-Instanz
SQL-Datenbank in Microsoft Fabric
Steuert das Verhalten der Transact-SQL-Anweisung COMMIT TRANSACTION. Der Standardwert für diese Einstellung ist OFF. Dies bedeutet, dass der Server Cursor nicht schließt, wenn Sie ein Commit für eine Transaktion ausführen.
Transact-SQL-Syntaxkonventionen
Syntax
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }
Hinweise
Wenn SET CURSOR_CLOSE_ON_COMMIT AN ist, schließt diese Einstellung alle offenen Cursor beim Commit oder Rollback gemäß ISO. Wenn SET CURSOR_CLOSE_ON_COMMIT AUS ist, wird der Cursor nicht geschlossen, wenn eine Transaktion ausgeführt wird.
Hinweis
SET CURSOR_CLOSE_ON_COMMIT auf ON wird beim Rollback keine offenen Cursor schließen, wenn der Rollback von einer SAVE TRANSACTION-Anweisung auf eine savepoint_name angewendet wird.
Wenn SET CURSOR_CLOSE_ON_COMMIT OFF ist, schließt eine ROLLBACK-Anweisung nur offene asynchrone Cursor, die nicht vollständig gefüllt sind. STATIC- oder INSENSITIVE-Cursor, die geöffnet wurden, nachdem Änderungen vorgenommen wurden, spiegeln den Datenstatus nicht mehr wider, wenn für die Änderungen ein Rollback ausgeführt wird.
SET SET CURSOR_CLOSE_ON_COMMIT steuert dasselbe Verhalten wie die CURSOR_CLOSE_ON_COMMIT Datenbankoption. Wenn CURSOR_CLOSE_ON_COMMIT auf AN oder AUS gesetzt ist, wird diese Einstellung für die Verbindung verwendet. Falls SET CURSOR_CLOSE_ON_COMMIT nicht angegeben, gilt der Wert in der Spalte is_cursor_close_on_commit_on in der sys.databases-Katalogansicht .
Der SQL Server Native Client OLE DB Provider für SQL Server und der SQL Server Native Client ODBC-Treiber werden beide auf AUS gesetztCURSOR_CLOSE_ON_COMMIT, wenn sie sich verbinden. DB-Library setzt den CURSOR_CLOSE_ON_COMMIT Wert nicht automatisch fest.
Wenn SETSET ANSI_DEFAULTS aktiviert ist, SETSET CURSOR_CLOSE_ON_COMMIT ist diese Option aktiviert.
Die Einstellung wird SET CURSOR_CLOSE_ON_COMMIT zur Ausführung oder Laufzeit und nicht zur Analysezeit festgelegt.
Um die aktuelle Einstellung anzuzeigen, führen Sie die folgende Abfrage aus.
DECLARE @CURSOR_CLOSE VARCHAR(3) = 'OFF';
IF ( (4 & @@OPTIONS) = 4 ) SET @CURSOR_CLOSE = 'ON';
SELECT @CURSOR_CLOSE AS CURSOR_CLOSE_ON_COMMIT;
Berechtigungen
Erfordert die Mitgliedschaft in der public -Rolle.
Beispiele
Im folgenden Beispiel wird ein Cursor in einer Transaktion definiert. Anschließend wird versucht, den Cursor zu verwenden, nachdem ein Commit für die Transaktion ausgeführt wurde.
-- 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
Weitere Informationen
ALTER DATABASE (Transact-SQL)
TRANSAKTION BEGINNEN (Transact-SQL)
SCHLIESSEN (Transact-SQL)
ÜBERSCHREITEN TRANSAKTION (Transact-SQL)
ROLLBACK-TRANSAKTION (Transact-SQL)
SET Anweisungen (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)