Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
databáze SQL v Microsoft Fabric
je skalární funkce, která hlásí stav uživatelské transakce aktuálně běžícího požadavku. XACT_STATE ukazuje, zda má požadavek aktivní uživatelskou transakci a zda je transakce schopná být zavázána.
Syntaxe
XACT_STATE()
Poznámka:
Tato syntaxe není podporována bezserverovým fondem SQL ve službě Azure Synapse Analytics.
Návratový typ
smallint
Poznámky
XACT_STATE vrátí následující hodnoty.
| Návratová hodnota | Meaning |
|---|---|
| 1 | Aktuální požadavek má aktivní uživatelskou transakci. Požadavek může provádět jakékoli činnosti, včetně zápisu dat a potvrzení transakce. |
| 0 | Pro aktuální požadavek neexistuje žádná aktivní uživatelská transakce. |
| -1 | Aktuální požadavek má aktivní uživatelskou transakci, ale došlo k chybě, která způsobila, že je transakce klasifikována jako nezávazovatelná transakce. Požadavek nemůže transakci potvrdit ani se vrátit zpět do uloženého bodu; může požadovat pouze úplné vrácení transakce. Požadavek nemůže provést žádné zápisové operace, dokud transakci nevrátí zpět. Požadavek může provádět čtení pouze do doby, než transakci vrátí zpět. Po vrácení transakce může požadavek provádět jak čtení, tak zápis a může zahájit novou transakci. Když nejvzdálenější dávka skončí, databázový engine automaticky vrátí zpět všechny aktivní nezávazné transakce. Pokud při vstupu transakce do stavu nezávaznosti nebyla odeslána chybová zpráva, po dokončení dávky bude klientské aplikaci zaslána chybová zpráva. Tato zpráva znamená, že byla detekována a vrácena zpět transakce bez závazku. |
Funkce XACT_STATE i @@TRANCOUNT lze použít k detekci, zda aktuální požadavek obsahuje aktivní uživatelskou transakci. @@TRANCOUNT nelze použít k určení, zda byla tato transakce klasifikována jako nezávazná transakce. XACT_STATE nelze použít k určení, zda existují vnořené transakce.
Examples
Následující příklad používá XACT_STATE v bloku CATCH konstruktu TRY...CATCH k určení, zda transakci commitovat nebo vrátit zpět. Protože SET XACT_ABORT je , ONchyba porušení omezení způsobí, že transakce vstoupí do stavu nezávazovatelného.
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
Viz také
ZAČÁTEK TRANSAKCE (Transact-SQL)
transakce potvrzení (Transact-SQL)
transakce vrácení zpět (Transact-SQL)
ULOŽIT TRANSAKCI (Transact-SQL)
VYZKOUŠET... ZACHYTIT (Transact-SQL)