Aracılığıyla paylaş


XACT_STATE (Transact-SQL)

Geçerli olarak çalışan bir istek kullanıcı hareket durumu rapor skaler fonksiyon belirtilir.XACT_STATE isteği bir etkin kullanıcı hareketi olup olmadığı ve hareket tamamlanmış olarak yeteneğine sahip olup olmadığını gösterir.

Topic link iconTransact-SQL sözdizimi kuralları

XACT_STATE()

Dönüş Türü

smallint

Remarks

XACT_STATE aşağıdaki değerleri döndürür.

Dönüş değeri

Anlamı

1

Geçerli isteğin bir etkin kullanıcı hareketi yok.Isteği, veri yazma ve hareket yapılıyor dahil olmak üzere, tüm eylemleri gerçekleştirebilir.

0

Geçerli isteğin etkin kullanıcı işlem yok.

-1

Geçerli isteğin bir etkin kullanıcı hareketi olsa da, hareket yürütülemeyen bir işlem olarak sınıflandırılmalarını neden bir hata oluştu.Istek edemiyor veya hareketi tamamlamak için yürütme noktası geri almak almak; yalnızca işlemin tam geri almak almak almak alma isteyebilirler.Bu işlemi geri alır kadar isteği herhangi bir yazma işlemi gerçekleştiremiyor.Bu işlemi geri alır kadar isteği, yalnızca okuma işlemleri gerçekleştirebilirsiniz.Sonra işlem geri alındı, isteği her ikisi de gerçekleştirebileceği okuma ve yazma işlemleri ve yeni bir hareket başlayabilirsiniz.

Çalışan, toplu iş iş iş sona erdiğinde Database Engine otomatik olarak tüm etkin yürütülemeyen işlemleri geri almak almak döner. toplu iş iş iş tamamlandığında yürütülemeyen durumu, hareket girdiğinizde hata iletisi gönderildi istemci uygulamasına bir hata iletisi gönderilir.Bu ileti, bir yürütülemeyen hareket algıladı ve geri gösterir.yürütülemeyen hareketleri hakkında daha fazla bilgi için bkz: Kullanarak TRY... CATCH Transact-SQL'DE.

XACT_STATE hem @@ TRANCOUNT, işlevler, geçerli isteğin bir etkin kullanıcı hareketi olup olmadığını algılamak için kullanılabilir.@@ TRANCOUNT, bu işlem yürütülemeyen bir işlem olarak Sınıflandırılmamış olup olmadığını belirlemek için kullanılamaz.XACT_STATE iç içe geçmiş işlem olup olmadığını belirlemek için kullanılamaz.

Örnekler

Aşağıdaki örnek kullanır. XACT_STATE içinde CATCH Bloke bir TRY…CATCH tamamlanmaya veya bir hareketi geri almak almak belirlemek için bu seçeneği oluşturun. Çünkü SET XACT_ABORT olan ON, kısıtlama ihlali hatası neden olur, hareketi yürütülemeyen bir il girin.

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