SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

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.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }

Notes

Si SET CURSOR_CLOSE_ON_COMMIT est défini sur ON, tous les curseurs ouverts sont fermés au moment de la validation ou de la restauration, conformément à la norme SQL-92. Si SET CURSOR_CLOSE_ON_COMMIT est défini sur OFF, le curseur n'est pas fermé lorsque la transaction est validée.

ms184746.note(fr-fr,SQL.90).gifRemarque :
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 du catalogue sys.databases est appliquée.

Le fournisseur OLE DB SQL Native Client pour SQL Server et le pilote ODBC SQL Native Client attribuent la valeur OFF à SET 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.

Autorisations

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

Exemple

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)
INSERT INTO t1 
VALUES (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

Référence

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

Autres ressources

Définition des options de base de données

Aide et Informations

Assistance sur SQL Server 2005