Aracılığıyla paylaş


yürütme TRANSACTION (Transact-SQL)

Son başarılı örtülü veya açık hareket olarak işaretler.@@ TRANCOUNT, 1, değilse işlemi yürütme yaptığı tüm veri değişiklikleri kalıcı bir parçası olarak veritabanında, hareketin başlangıç bu yana gerçekleştirilen azaltır @@ TRANCOUNT 0 ve işlem tarafından tutulan kaynakları serbest bırakır.@@ TRANCOUNT, 1'den büyükse işlemi yürütme azaltır @@ TRANCOUNT 1 ve bir işlem tarafından etkin kalır.

Topic link iconTransact-SQL sözdizimi kuralları

COMMIT { TRAN | TRANSACTION } [ transaction_name | @tran_name_variable ] ]
[ ; ]

Bağımsız değişkenler

  • transaction_name
    Is ignored by the SQL Server Database Engine.transaction_name specifies a transaction name assigned by a previous BEGIN TRANSACTION.transaction_namemust conform to the rules for identifiers, but cannot exceed 32 characters.transaction_name can be used as a readability aid by indicating to programmers which nested BEGIN TRANSACTION the COMMIT TRANSACTION is associated with.

  • @tran\_name\_variable
    Kullanıcı tanımlı bir değişkenin adını, geçerli işlem adını içeren iş.Değişkeni ile bildirilmeli bir char, varchar, nchar, veya nvarchar Veri Türü. Birden fazla 32 karakter değişkenine geçirilirse, yalnızca 32 karakter kullanılan; kalan diğer karakterler kesiliyor.

Remarks

Bunu sorumluluğundadır Transact-SQL verilecek Programcı işlemi yürütme hareket tarafından başvurulan tüm veriler, mantıksal olarak doğru yalnızca bir noktada.

Kaydedilmiş işlem ise bir Transact-SQL Dağıtılmış işlem, işlemi yürütme tüm sunucular hareketle ilgili tamamlanması için bir iki aşamalı yürütme iletişim kuralını kullanmak için MS DTC tetikler. Yerel bir işlem aynı örnek üzerinde iki veya daha fazla veritabanlarının yayılmışsa Database Engine, bir iç iki aşamalı yürütme için tamamlama tüm veritabanlarının hareketle ilgili örnek kullanır.

Iç içe geçmiş hareketler kullanıldığında, iç hareketlerin iptalleri değil kaynaklarını boşaltın veya kendi değişiklikler kalıcı.Veri değişiklikleri kalıcı hale getirilir ve yalnızca dış işlem tamamlanmış olduğunda kaynakları serbest.Her yürütme @@ TRANCOUNT, 1'den büyük olduğunda verilen TRANSACTION yalnızca azaltır @@ TRANCOUNT 1.@@ TRANCOUNT sıfıra indirildiği son olarak, tüm dış işlemin edinmiştir.Çünkü transaction_name tarafından yok sayılır Database Engine, veren bir işlemi yürütme 1 ile bekleyen iç işlemler yalnızca azaltır @@ TRANCOUNT, dış bir işlem adını başvuru.

Veren bir işlemi yürütme @@ TRANCOUNT, sonuçlar hata; 0 olduğunda ilgili BEGIN TRANSACTION yoktur.

Bir işlem ardından geri almak almak alamazsınız bir işlemi yürütme veri değişikliklerini veritabanına kalıcı bir parçası yapıldı, çünkü ifade verilir.

The Database Engine in SQL Server 2000 and later increments the transaction count within a deyim only when the transaction count is 0 at the start of the deyim. Içinde SQL Server sürüm 7.0, hareket sayısı, deyim başında hareket sayısı ne olursa olsun her zaman artırılır. Bu, daha düşük olması Tetikleyicilerin @@ TRANCOUNT tarafından döndürülen değeri neden olabilir SQL Server 2000 ve olduğu daha sonraki sürümleri SQL Server sürüm 7.0.

Içinde SQL Server 2000 ve daha sonra bir işlemi yürütme veya WORK yürütme deyim de tetikleyici yürütülür ve hiçbir ilgili açık veya örtülü BEGIN TRANSACTION deyim başlangıcında tetikleyicinin yoktur, kullanıcıların farklı davranışını daha da görebilirsiniz SQL Server sürüm 7.0. Yerleştirme işlemi yürütme veya bir tetikleyici yürütme WORK deyimlerinde önerilir.

İzinler

Üyelik gerektirir Ortak roldür.

Örnekler

C.Için yürütme bir hareket.

Bu örnek, bir iş aday siler.

USE AdventureWorks;
GO
BEGIN TRANSACTION;
GO
DELETE FROM HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
GO
COMMIT TRANSACTION;
GO

b.Iç içe geçmiş bir hareketi tamamlamak için .

Bu örnek, bir tablo oluşturur, üç düzey iç içe geçmiş işlem oluşturur ve sonra da iç içe geçmiş hareketi tamamlar.Her TRANSACTION yürütme deyim olsa da bir transaction_name parametre arasında TRANSACTION yürütme ve BEGIN TRANSACTION deyimlerini bir ilişkisi yoktur. The transaction_name parameters are simply readability aids to help the programmer ensure that the proper number of commits are coded to decrement @@TRANCOUNT to 0 and thereby yürütme the outer transaction.

USE AdventureWorks;
GO
IF OBJECT_ID(N'TestTran',N'U') IS NOT NULL
    DROP TABLE TestTran;
GO
CREATE TABLE TestTran (Cola INT PRIMARY KEY, Colb CHAR(3));
GO
-- This statement sets @@TRANCOUNT to 1.
BEGIN TRANSACTION OuterTran;
GO
PRINT N'Transaction count after BEGIN OuterTran = '
    + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
INSERT INTO TestTran VALUES (1, 'aaa');
GO
-- This statement sets @@TRANCOUNT to 2.
BEGIN TRANSACTION Inner1;
GO
PRINT N'Transaction count after BEGIN Inner1 = '
    + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
INSERT INTO TestTran VALUES (2, 'bbb');
GO
-- This statement sets @@TRANCOUNT to 3.
BEGIN TRANSACTION Inner2;
GO
PRINT N'Transaction count after BEGIN Inner2 = '
    + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
INSERT INTO TestTran VALUES (3, 'ccc');
GO
-- This statement decrements @@TRANCOUNT to 2.
-- Nothing is committed.
COMMIT TRANSACTION Inner2;
GO
PRINT N'Transaction count after COMMIT Inner2 = '
    + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
-- This statement decrements @@TRANCOUNT to 1.
-- Nothing is committed.
COMMIT TRANSACTION Inner1;
GO
PRINT N'Transaction count after COMMIT Inner1 = '
    + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
-- This statement decrements @@TRANCOUNT to 0 and
-- commits outer transaction OuterTran.
COMMIT TRANSACTION OuterTran;
GO
PRINT N'Transaction count after COMMIT OuterTran = '
    + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO