Udostępnij za pośrednictwem


XACT_STATE (Transact-SQL)

Jest wartość skalarna funkcja , która raportuje stan transakcji użytkownika bieżącego żądania uruchomione.XACT_STATE wskazuje, czy wniosek został transakcji aktywnego użytkownika i transakcja jest w stanie zaangażowanych.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

XACT_STATE()

Zwracany typ

smallint

Uwagi

XACT_STATE zwraca następujące wartości.

Zwracanie wartości

Znaczenie

1

Bieżące żądanie ma transakcji aktywnego użytkownika.Wniosek można wykonywać żadnych działań, w tym zapisie danych i zatwierdzeniem transakcji.

0

Brak transakcji aktywnego użytkownika dla bieżącego żądania.

-1

Bieżące żądanie ma transakcji aktywnego użytkownika, ale wystąpił błąd, powodującej transakcji klasyfikuje się jako niemożliwy do zatwierdzenia transakcji.Żądanie nie zatwierdzanie transakcji lub wycofać do punkt zapisu; mogą żądać tylko pełne wycofywania transakcji.Żądania nie można wykonać żadnych operacji zapisu, aż wycofywaniu transakcji.Wniosek można wykonywać tylko operacje odczytu, dopóki wycofywaniu transakcji.Po transakcja została wycofana, wniosek można wykonać zarówno odczytu i zapisu operacji i można rozpocząć nową transakcję.

Po zakończeniu partia wykonywania, Aparat baz danych zostanie automatycznie wycofać wszystkie aktywne niemożliwy do zatwierdzenia transakcje.Jeśli nie komunikat o błędzie został wysłany po wprowadzeniu transakcji niemożliwy do zatwierdzenia Państwo, po zakończeniu partia , komunikat o błędzie wysyłany do aplikacji klient .Ten komunikat wskazuje, że niemożliwy do zatwierdzenia wykryto transakcję i wycofane.Aby uzyskać więcej informacji o niemożliwy do zatwierdzenia transakcji, zobacz Za pomocą SPRÓBOWAĆ...POŁOWU w języku Transact-SQL.

Funkcje XACT_STATE i @@ TRANCOUNT może służyć do wykrywać , czy bieżące żądanie transakcji aktywnego użytkownika.@@ TRANCOUNT może być użyty do określenia, czy tej transakcji został sklasyfikowany jako niemożliwy do zatwierdzenia transakcji.XACT_STATE nie można użyć do określenia, czy są transakcji zagnieżdżonych.

Przykłady

W poniższym przykładzie użyto XACT_STATE w CATCH blok TRY…CATCH konstruować w celu ustalenia w celu zatwierdzanie lub wycofać transakcji.Ponieważ SET XACT_ABORT jest ON, transakcji, wprowadź powoduje błąd naruszenie ograniczenia niemożliwy do zatwierdzenia stan.

USE AdventureWorks2008R2;
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