Aracılığıyla paylaş


XACT_STATE (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalitik Platform Sistemi (PDW)Microsoft Fabric'te SQL veritabanı

Mevcut çalışan bir isteğin kullanıcı işlem durumunu bildiren skaler bir fonksiyondur. XACT_STATE, talebin aktif bir kullanıcı işlemi olup olmadığını ve işlemin bağlanabilir olup olmadığını gösterir.

Transact-SQL söz dizimi kuralları

Sözdizimi

XACT_STATE()  

Uyarı

Bu söz dizimi, Azure Synapse Analytics'teki sunucusuz SQL havuzu tarafından desteklenmez.

Dönüş Türü

smallint

Açıklamalar

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

Dönüş değeri Meaning
1 Mevcut isteğin aktif bir kullanıcı işlemi vardır. İstek, veri yazma ve işlemi gerçekleştirmek dahil olmak üzere herhangi bir eylemi gerçekleştirebilir.
0 Mevcut istek için aktif kullanıcı işlemi yoktur.
-1 Mevcut istekte aktif bir kullanıcı işlemi vardır, ancak bir hata gerçekleşmiştir ve bu da işlemin taahhüt edilemeyen bir işlem olarak sınıflandırılmasına neden olmuştur. İstek işlemi yerine getiremez veya kaydetme noktasına geri dönemez; İşlemin tam geri alınmasını sadece talep edebilir. İstek, işlemi geri alana kadar herhangi bir yazma işlemi gerçekleştiremez. İstek, işlemi geri alana kadar okuma işlemlerini yalnızca gerçekleştirebilir. İşlem geri alındıktan sonra, istek hem okuma hem yazma işlemlerini gerçekleştirebilir ve yeni bir işlem başlatabilir.

En dıştaki toplu çalışma tamamlandığında, Veritabanı Motoru aktif olarak bağlanamayan işlemleri otomatik olarak geri alır. İşlem bağlanamayan bir duruma girdiğinde hata mesajı gönderilmediyse, toplu işlem tamamlandığında istemci uygulamasına hata mesajı gönderilir. Bu mesaj, bağlanamayan bir işlemin tespit edilip geri alındığını gösterir.

Hem XACT_STATE hem de @@TRANCOUNT fonksiyonları, mevcut talebin aktif bir kullanıcı işlemi olup olmadığını tespit etmek için kullanılabilir. @@TRANCOUNT, bu işlemin taahhüt edilemeyen bir işlem olarak sınıflandırılıp sınıflandırılmadığını belirlemek için kullanılamaz. XACT_STATE iç içe işlem olup olmadığını belirlemek için kullanılamaz.

Örnekler

Aşağıdaki örnek, bir TRY...CATCH işlemi bağlayıp geri almayacağını belirlemek için bir yapının bloğunda kullanılır.XACT_STATECATCH Çünkü SET XACT_ABORT , ONkısıtlama ihlali hatası, işlemin taahhüt edilemeyen bir duruma girmesine neden olur.

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  

Ayrıca Bkz.

@@TRANCOUNT (Transact-SQL)
BAŞLAYIN (Transact-SQL)
İŞLEME İŞLEMI (Transact-SQL)
GERI ALMA İŞLEMI (Transact-SQL)
KAYDET IŞLEMI (Transact-SQL)
DENEYIN... CATCH (Transact-SQL)