Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Database in Microsoft Fabric
Is een scalaire functie die de transactiestatus van de gebruiker van de huidige sessie rapporteert.
XACT_STATE geeft aan of de sessie een actieve gebruikerstransactie heeft en of de transactie kan worden doorgevoerd.
Transact-SQL syntaxis-conventies
Syntaxis
XACT_STATE()
Opmerking
Deze syntaxis wordt niet ondersteund door een serverloze SQL-pool in Azure Synapse Analytics.
Retourtypen
smallint
Opmerkingen
XACT_STATE retourneert de volgende waarden.
| Retourwaarde | Description |
|---|---|
| 1 | De huidige sessie heeft een actieve gebruikerstransactie. De sessie kan alle acties uitvoeren, waaronder het schrijven van gegevens en het doorvoeren van de transactie. |
| 0 | Er is geen actieve gebruikerstransactie voor de huidige sessie. |
| -1 | De huidige sessie heeft een actieve gebruikerstransactie, maar er is een fout opgetreden waardoor de transactie werd geclassificeerd als een niet-commiteerbare transactie. De sessie kan de transactie niet doorvoeren of terugdraaien naar een savepoint; het kan alleen een volledige terugdraaiactie van de transactie aanvragen. De sessie kan geen schrijfbewerkingen uitvoeren totdat de transactie wordt teruggedraaid. De sessie kan alleen leesbewerkingen uitvoeren totdat de transactie wordt teruggedraaid. Nadat de transactie is teruggedraaid, kan de sessie zowel lees- als schrijfbewerkingen uitvoeren en een nieuwe transactie starten. Wanneer de buitenste batch is uitgevoerd, worden alle actieve niet-commiteerbare transacties automatisch teruggedraaid door de database-engine. Als er geen foutbericht is verzonden wanneer de transactie een niet-gecommitteerde status heeft ingevoerd, wordt er een foutbericht verzonden naar de clienttoepassing wanneer de batch is voltooid. Dit bericht geeft aan dat een niet-committable transactie is gedetecteerd en teruggedraaid. |
Zowel de als @@TRANCOUNT de XACT_STATE functies kunnen worden gebruikt om te detecteren of de huidige sessie een actieve gebruikerstransactie heeft.
@@TRANCOUNT kan niet worden gebruikt om te bepalen of die transactie is geclassificeerd als een niet-commiteerbare transactie.
XACT_STATE kan niet worden gebruikt om te bepalen of er interne transacties zijn.
Voorbeelden
De codevoorbeelden in dit artikel gebruiken de AdventureWorks2025 of AdventureWorksDW2025 voorbeelddatabase die u kunt downloaden van de startpagina van Microsoft SQL Server Samples en Community Projects .
Het volgende voorbeeld gebruikt XACT_STATE in het CATCH blok van een TRY...CATCH construct om te bepalen of een transactie moet committen of teruggerold moet worden. Omdat SET XACT_ABORT is ON, zorgt de constraint-overtredingfout ervoor dat de transactie in een niet-committable toestand komt.
-- 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;