Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Base de données SQL dans Microsoft Fabric
Fonction scalaire qui signale l’état de transaction utilisateur de la session active.
XACT_STATE indique si la session a une transaction utilisateur active et si la transaction est capable d’être validée.
Conventions de la syntaxe Transact-SQL
Syntaxe
XACT_STATE()
Notes
Cette syntaxe n’est pas prise en charge par le pool SQL serverless dans Azure Synapse Analytics.
Types de retour
smallint
Notes
XACT_STATE retourne les valeurs suivantes.
| Valeur retournée | Descriptif |
|---|---|
| 1 | La session active a une transaction utilisateur active. La session peut effectuer toutes les actions, notamment l’écriture de données et la validation de la transaction. |
| 0 | Il n’existe aucune transaction utilisateur active pour la session active. |
| -1 | La session active a une transaction utilisateur active, mais une erreur s’est produite qui a provoqué la classification de la transaction comme une transaction noncommittable. La session ne peut pas valider la transaction ni revenir à un point d’enregistrement ; elle ne peut demander qu’une restauration complète de la transaction. La session ne peut effectuer aucune opération d’écriture tant qu’elle n’a pas rétabli la transaction. La session ne peut effectuer que des opérations de lecture jusqu’à ce qu’elle restaure la transaction. Une fois la transaction restaurée, la session peut effectuer des opérations de lecture et d’écriture et commencer une nouvelle transaction. Lorsque le lot le plus externe se termine en cours d’exécution, le moteur de base de données restaure automatiquement toutes les transactions noncommittables actives. Si aucun message d’erreur n’a été envoyé lorsque la transaction a entré un état noncommittable, une fois le lot terminé, un message d’erreur est envoyé à l’application cliente. Ce message indique qu'une transaction non validable a été détectée et restaurée. |
Les fonctions et @@TRANCOUNT les XACT_STATE fonctions peuvent être utilisées pour détecter si la session active a une transaction utilisateur active.
@@TRANCOUNT ne peut pas être utilisé pour déterminer si cette transaction est classifiée comme une transaction noncommittable.
XACT_STATE ne peut pas être utilisé pour déterminer s’il existe des transactions internes.
Exemples
Les exemples de code de cet article utilisent les bases de données d'exemple AdventureWorks2025 ou AdventureWorksDW2025, que vous pouvez télécharger à partir de la page d'accueil Microsoft SQL Server Samples and Community Projects.
L'exemple suivant utilise XACT_STATE dans le bloc CATCH d'une construction TRY...CATCH pour déterminer si une transaction doit être validée ou annulée. L'option SET XACT_ABORT étant active (ON), l'erreur de violation de contrainte place la transaction dans un état non validable.
-- SET XACT_ABORT ON renders the transaction uncommittable
-- when the constraint violation occurs.
SET XACT_ABORT ON;
BEGIN TRY
BEGIN TRANSACTION;
-- A FOREIGN KEY constraint exists on this table. This
-- statement generates a constraint violation error.
DELETE FROM Production.Product
WHERE ProductID = 980;
-- If the delete operation succeeds, commit the transaction. The CATCH
-- block does not execute.
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
-- Test whether the transaction is uncommittable.
IF XACT_STATE() = -1
BEGIN
PRINT 'The transaction is in an uncommittable state.' +
' Rolling back transaction.'
ROLLBACK TRANSACTION;
END;
-- Test whether the transaction is active and valid.
IF XACT_STATE() = 1
BEGIN
PRINT 'The transaction is committable.' +
' Committing transaction.'
COMMIT TRANSACTION;
END;
END CATCH;