Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analitik 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)