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ı

Geçerli oturumun kullanıcı işlem durumunu bildiren bir skaler işlevdir. XACT_STATE oturumun etkin bir kullanıcı işlemine sahip olup olmadığını ve işlemin işlenip işlenemeyeceğini 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ürleri

smallint

Açıklamalar

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

Dönüş değeri Description
1 Geçerli oturumda etkin bir kullanıcı işlemi var. Oturum, veri yazma ve işlemi işleme dahil olmak üzere tüm eylemleri gerçekleştirebilir.
0 Geçerli oturum için etkin kullanıcı işlemi yok.
-1 Geçerli oturumda etkin bir kullanıcı işlemi var, ancak işlemin yaygın olmayan bir işlem olarak sınıflandırılmasına neden olan bir hata oluştu. Oturum işlemi işleyemiyor veya bir kayıt noktasına geri alamıyor; yalnızca işlemin tam geri alınması istenebilir. Oturum, işlemi geri alana kadar herhangi bir yazma işlemi gerçekleştiremez. Oturum yalnızca işlemi geri alana kadar okuma işlemleri gerçekleştirebilir. İşlem geri alındıktan sonra oturum hem okuma hem de yazma işlemlerini gerçekleştirebilir ve yeni bir işlem başlatabilir.

En dıştaki toplu işlemin çalışması tamamlandığında, Veritabanı Altyapısı tüm etkin ve yaygın olmayan işlemleri otomatik olarak geri alır. İşlem yaygın olmayan bir duruma girdiğinde hata iletisi gönderilmediyse, toplu işlem tamamlandığında istemci uygulamasına bir hata iletisi gönderilir. Bu mesaj, bağlanamayan bir işlemin tespit edilip geri alındığını gösterir.

XACT_STATE Hem hem de @@TRANCOUNT işlevleri geçerli oturumun etkin bir kullanıcı işlemi olup olmadığını algılamak için kullanılabilir. @@TRANCOUNT bu işlemin yaygın olmayan 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şlemler olup olmadığını belirlemek için kullanılamaz.

Örnekler

Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz AdventureWorksDW2025 veya örnek veritabanını kullanır.

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

-- SET XACT_ABORT ON renders 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 generates a constraint violation error.
        DELETE FROM Production.Product
            WHERE ProductID = 980;

    -- If the delete operation succeeds, commit the transaction. The CATCH
    -- block does not execute.
    COMMIT TRANSACTION;
END TRY
BEGIN CATCH
    -- 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;