SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Řídí chování příkazu COMMIT TRANSACTION Transact-SQL. Výchozí hodnota tohoto nastavení je VYPNUTO. To znamená, že server nezavírá kurzory, když provedete transakci.

Transact-SQL konvence syntaxe

Syntaxe

  
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }  

Poznámky

Když SET CURSOR_CLOSE_ON_COMMIT je zapnuto, toto nastavení uzavře všechny otevřené kurzory při commit nebo rollback v souladu s ISO. Když SET CURSOR_CLOSE_ON_COMMIT je VYPNUTO, kurzor se při potvrzení transakce nezavírá.

Poznámka:

SET CURSOR_CLOSE_ON_COMMIT to ON nezavírá otevřené kurzory při rollbacku, když je rollback aplikován na savepoint_name z příkazu SAVE TRANSACTION.

Když SET CURSOR_CLOSE_ON_COMMIT je VYPNUTO, příkaz ROLLBACK uzavře pouze otevřené asynchronní kurzory, které nejsou plně obsazené. STATICKÉ nebo NECITLIVÉ kurzory, které byly otevřeny po provedení úprav, již nebudou odrážet stav dat, pokud jsou úpravy vráceny zpět.

SET SET CURSOR_CLOSE_ON_COMMIT ovládá stejné chování jako volba databáze CURSOR_CLOSE_ON_COMMIT . Pokud CURSOR_CLOSE_ON_COMMIT je nastaveno na ZAPNUTO nebo VYPNUTO, toto nastavení se použije na připojení. Pokud SET CURSOR_CLOSE_ON_COMMIT nebyla specifikována, platí hodnota ve sloupci is_cursor_close_on_commit_on v katalogu sys.databases .

SQL Server Native Client OLE DB Provider pro SQL Server a SQL Server Native Client ODBC ovladač jsou oba nastaveny CURSOR_CLOSE_ON_COMMIT na VYPNUTO při připojení. DB-Library automaticky nenastavuje CURSOR_CLOSE_ON_COMMIT hodnotu.

Je-li SETSET ANSI_DEFAULTS zapnuto, SETSET CURSOR_CLOSE_ON_COMMIT je povoleno.

Nastavení je SET CURSOR_CLOSE_ON_COMMIT nastaveno při spuštění nebo běhu a ne při parse.

Pro zobrazení aktuálního nastavení tohoto nastavení spusťte následující dotaz.

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

Povolení

Vyžaduje členství ve veřejné roli .

Examples

Následující příklad definuje kurzor v transakci a snaží se jej použít po potvrzení transace.

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

Viz také

ALTER DATABASE (Transact-SQL)
ZAČÁTEK TRANSAKCE (Transact-SQL)
ZAVŘÍT (Transact-SQL)
transakce potvrzení (Transact-SQL)
transakce vrácení zpět (Transact-SQL)
SET Příkazy (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)