SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Styr beteendet för Transact-SQL COMMIT TRANSACTION-satsen. Standardvärdet för denna inställning är AV. Detta innebär att servern inte stänger markörer när du genomför en transaktion.

Transact-SQL syntaxkonventioner

Syntax

  
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }  

Anmärkningar

När SET CURSOR_CLOSE_ON_COMMIT är PÅ stänger denna inställning alla öppna markörer vid commit eller rollback i enlighet med ISO. När SET CURSOR_CLOSE_ON_COMMIT är AV stängs inte markören när en transaktion genomförs.

Anmärkning

SET CURSOR_CLOSE_ON_COMMIT på ON stänger inte öppna markörer vid rollback när rollbacken appliceras på en savepoint_name från en SAVE TRANSACTION-sats.

När SET CURSOR_CLOSE_ON_COMMIT är OFF stänger ett ROLLBACK-sats endast öppna asynkrona markörer som inte är fullt fyllda. STATISKA eller OKÄNSLIGA markörer som öppnades efter att modifieringar gjorts kommer inte längre att återspegla datans tillstånd om ändringarna rullas tillbaka.

SET CURSOR_CLOSE_ON_COMMIT styr samma beteende som CURSOR_CLOSE_ON_COMMIT databasalternativet. Om CURSOR_CLOSE_ON_COMMIT är inställd på PÅ eller AV används den inställningen på anslutningen. Om SET CURSOR_CLOSE_ON_COMMIT inte har specificerats gäller värdet i kolumnen is_cursor_close_on_commit_on i sys.databases-katalogvyn .

SQL Server Native Client OLE DB Provider för SQL Server och SQL Server Native Client ODBC-drivrutinen sätter båda CURSOR_CLOSE_ON_COMMIT till AV när de ansluter upp. DB-Library sätter inte automatiskt värdet CURSOR_CLOSE_ON_COMMIT.

När SET ANSI_DEFAULTS är PÅ är SET CURSOR_CLOSE_ON_COMMIT aktiverat.

Inställningen för SET CURSOR_CLOSE_ON_COMMIT är inställd vid exekverings- eller körningstid och inte vid parsetid.

För att se den aktuella inställningen för denna inställning, kör följande fråga.

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

Permissions

Kräver medlemskap i offentlig roll.

Examples

Följande exempel definierar en markör i en transaktion och försöker använda den efter att transaktionen har genomförts.

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

Se även

ÄNDRA DATABAS (Transact-SQL)
STARTA TRANSAKTION (Transact-SQL)
STÄNG (Transact-SQL)
ÖVERLÅTA TRANSAKTION (Transact-SQL)
ÅTERSTÄLLNINGSTRANSAKTION (Transact-SQL)
SET-instruktioner (Transact-SQL)
STÄLL ANSI_DEFAULTS (Transact-SQL)