Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-databas i Microsoft Fabric
Är en skalär funktion som rapporterar användarens transaktionstillstånd för en aktuell körande förfrågan. XACT_STATE anger om förfrågan har en aktiv användartransaktion och om transaktionen kan commitas.
Transact-SQL syntaxkonventioner
Syntax
XACT_STATE()
Anmärkning
Den här syntaxen stöds inte av en serverlös SQL-pool i Azure Synapse Analytics.
Returtyp
smallint
Anmärkningar
XACT_STATE returnerar följande värden.
| Returvärde | Meaning |
|---|---|
| 1 | Den aktuella förfrågan har en aktiv användartransaktion. Begäran kan utföra alla åtgärder, inklusive att skriva data och genomföra transaktionen. |
| 0 | Det finns ingen aktiv användartransaktion för den aktuella förfrågan. |
| -1 | Den aktuella förfrågan har en aktiv användartransaktion, men ett fel har inträffat som har gjort att transaktionen klassificerats som en icke-committable transaktion. Begäran kan inte committa transaktionen eller rulla tillbaka till en sparpunkt; Den kan bara begära en fullständig återställning av transaktionen. Begäran kan inte utföra några skrivoperationer förrän den rullar tillbaka transaktionen. Begäran kan endast utföra läsoperationer tills den rullar tillbaka transaktionen. Efter att transaktionen har rullats tillbaka kan förfrågan utföra både läs- och skrivoperationer och kan starta en ny transaktion. När den yttersta batchen är klar kommer databasmotorn automatiskt att rulla tillbaka alla aktiva, icke-committable transaktioner. Om inget felmeddelande skickades när transaktionen gick in i ett icke-committabelt tillstånd, kommer ett felmeddelande att skickas till klientapplikationen när batchen är klar. Detta meddelande indikerar att en ocommittable transaktion upptäcktes och rullades tillbaka. |
Både XACT_STATE- och @@TRANCOUNT-funktionerna kan användas för att upptäcka om den aktuella förfrågan har en aktiv användartransaktion. @@TRANCOUNT kan inte användas för att avgöra om den transaktionen har klassificerats som en ocommittable transaktion. XACT_STATE kan inte användas för att avgöra om det finns nästlade transaktioner.
Examples
Följande exempel använder XACT_STATE i blocket CATCH av en TRY...CATCH konstruktion för att avgöra om en transaktion ska committas eller rullas tillbaka. Eftersom SET XACT_ABORT är ON, orsakar begränsningsbrottet att transaktionen går in i ett icke-committabelt tillstånd.
USE AdventureWorks2022;
GO
-- SET XACT_ABORT ON will render 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 will generate a constraint violation error.
DELETE FROM Production.Product
WHERE ProductID = 980;
-- If the delete operation succeeds, commit the transaction. The CATCH
-- block will not execute.
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
-- Test XACT_STATE for 0, 1, or -1.
-- If 1, the transaction is committable.
-- If -1, the transaction is uncommittable and should
-- be rolled back.
-- XACT_STATE = 0 means there is no transaction and
-- a commit or rollback operation would generate an error.
-- 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;
GO
Se även
@@TRANCOUNT (Transact-SQL)
STARTA TRANSAKTION (Transact-SQL)
ÖVERLÅTA TRANSAKTION (Transact-SQL)
ÅTERSTÄLLNINGSTRANSAKTION (Transact-SQL)
SPARA TRANSAKTION (Transact-SQL)
TRY... CATCH (Transact-SQL)