Partage via


SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance

Détermine le comportement de l'instruction Transact-SQL COMMIT TRANSACTION. La valeur par défaut de ce paramètre est OFF, ce qui signifie que le serveur ne ferme pas les curseurs lorsque vous validez une transaction.

Conventions de la syntaxe Transact-SQL

Syntaxe

  
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }  

Notes

Lorsque SET CURSOR_CLOSE_ON_COMMIT a la valeur ON, ce paramètre ferme tous les curseurs ouverts lors de la validation ou de l'annulation conformément à ISO. Lorsque SET CURSOR_CLOSE_ON_COMMIT a la valeur OFF, le curseur n'est pas fermé lorsqu'une transaction est validée.

Notes

Si SET CURSOR_CLOSE_ON_COMMIT est défini sur ON, les curseurs ouverts ne sont pas fermés lors de la restauration si la restauration est appliquée à un nom de point d'enregistrement d'une instruction SAVE TRANSACTION.

Si SET CURSOR_CLOSE_ON_COMMIT est défini sur OFF, une instruction ROLLBACK ferme uniquement les curseurs ouverts asynchrones dont le remplissage n'est pas total. Les curseurs statiques et non sensitifs ouverts après des modifications ne reflètent plus l'état des données si les modifications sont ensuite annulées.

SET CURSOR_CLOSE_ON_COMMIT contrôle le même comportement que l'option de base de données CURSOR_CLOSE_ON_COMMIT. Si CURSOR_CLOSE_ON_COMMIT est défini sur ON ou OFF, cette option est utilisée pour la connexion. Si SET CURSOR_CLOSE_ON_COMMIT n’est pas spécifié, la valeur de la colonne is_cursor_close_on_commit_on de la vue de catalogue sys.databases est appliquée.

Le fournisseur OLE DB SQL Server Native Client pour SQL Server et le pilote ODBC SQL Server Native Client attribuent la valeur OFF à CURSOR_CLOSE_ON_COMMIT lors de la connexion. DB-Library n'affecte pas automatiquement de valeur à CURSOR_CLOSE_ON_COMMIT.

Lorsque SET ANSI_DEFAULTS est défini sur ON, l'option SET CURSOR_CLOSE_ON_COMMIT est activée.

L'option SET CURSOR_CLOSE_ON_COMMIT est définie lors de l'exécution, et non pas durant l'analyse.

Pour afficher la valeur actuelle de ce paramètre, exécutez la requête suivante.

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

Autorisations

Nécessite l'appartenance au rôle public .

Exemples

L'exemple suivant définit un curseur dans une transaction, puis tente de l'utiliser après la validation de cette dernière.

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

Voir aussi

ALTER DATABASE (Transact-SQL)
BEGIN TRANSACTION (Transact-SQL)
CLOSE (Transact-SQL)
COMMIT TRANSACTION (Transact-SQL)
ROLLBACK TRANSACTION (Transact-SQL)
Instructions SET (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)