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.
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.
[!REMARQUE]
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 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.
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