Aracılığıyla paylaş


xact_state (Transact-SQL)

Geçerli çalışan isteğin kullanıcı hareket durumunu bildirir bir skaler işlev kullanılır.xact_state isteği bir etkin kullanıcı hareket olup olmadığı ve hareket tamamlanmış yetenekli olup gösterir.

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

XACT_STATE()

Dönüş Türü

smallint

Açıklamalar

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

Dönüş değeri

Anlamı

1

Geçerli isteğin etkin kullanıcı hareket vardır.İstek veri yazma ve hareket tamamlanma masrafını da dahil olmak üzere tüm eylemleri gerçekleştirebilir.

0

Geçerli isteğin hiçbir etkin kullanıcı hareket vardır.

-1

Geçerli isteğin etkin kullanıcı hareket olsa da, hareket olarak sınıflandırılmalarını neden bir hata oluştu bir yürütülemeyen hareket.İstek yürütme hareket ya da geri almak için bir kayıt noktasıolamaz; yalnızca, tam bir geri alma hareketi de isteyebilir.Hareketi geri alır kadar isteği herhangi bir yazma işlemi gerçekleştiremiyor.Hareketi geri alır kadar isteği yalnızca okuma işlemleri gerçekleştirebilirsiniz.İşlem geri alındı sonra isteği hem de gerçekleştirebilirsiniz okuma ve yazma işlemleri ve yeni bir hareket başlayabilir.

toplu iş çalýþmayý bitirince Veritabanı Altyapısı otomatik olarak geri almak etkin olacak yürütülemeyen hareketleri.Hareket girdiğinizde hata iletisi gönderilip gönderilmediğini bir yürütülemeyen durumuna, toplu iş sona erdiğinde, bir hata iletisi gönderilecek istemci uygulama.Bu ileti gösterir bir yürütülemeyen hareket algılandı ve geri alındı.Hakkında daha fazla bilgi için yürütülemeyen hareketleri görmek İşlemek için try...Transact-SQL'de catch.

Geçerli isteğin etkin kullanıcı hareket olup olmadığını algılamak için xact_state ve @@ trancount işlevleri kullanılabilir.@@ trancount, bu hareketi olarak Sınıflandırılmamış olup olmadığını belirlemek için kullanılamaz bir yürütülemeyen hareket.xact_state, iç içe geçmiş hareketler olup olmadığını belirlemek için kullanılamaz.

Örnekler

Aşağıdaki örnek XACT_STATE , CATCH blok bir TRY…CATCH yapısı belirleme olup olmadığını için yürütme veya geri almak bir hareket.Çünkü SET XACT_ABORT olan ON, girmek hareket kısıtlama ihlali hataya neden olan bir yürütülemeyen durumu.

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