TAMAMLAMA hareket (Transact-SQL)
Sonunda başarılı bir örtük ya da belirtik işlemişaretler.@@ trancount 1 ise, hareket TAMAMLAMA hareket ile azaltır @@ trancount 0 tarafından tutulan kaynakları veritabanı kalıcı bir parçası hareketinin başlangıç boşaltır bu yana gerçekleştirilen tüm veri değişiklikleri yapar.@@ trancount 1'den büyük ise, hareket TAMAMLAMA azaltır @@ trancount yalnızca 1 ve hareket tarafından etkin olarak kalır.
Sözdizimi
COMMIT { TRAN | TRANSACTION } [ transaction_name | @tran_name_variable ] ]
[ ; ]
Bağımsız değişkenler
transaction_name
Tarafından göz ardı SQL Server Veritabanı Altyapısı.transaction_nameBAŞLAMADAN önceki işlem tarafından atanan bir işlem adını belirtir.transaction_nametanıtıcı kurallarına uyması gerekir, ancak 32 karakterden uzun olamaz.transaction_nameBEGIN TRANSACTION TAMAMLAMA hareket ile ilişkili iç içe olan programcılar belirterek okunabilirlik yardımcı olarak kullanılabilir.@tran_name_variable
Kullanıcı tanımlı bir değişken adını içeren geçerli hareket adı.Değişken ile bildirilmesi gerekir bir char, varchar, nchar, veya nvarchar veri türü.Yalnızca 32 karakter uzunluğu 32 karakterden fazla değişken belirtilmediyse, kullanılacak; kalan karakterler kesiliyor.
Açıklamalar
Onu sorumluluğundadır Transact-SQL hareketinin başvurduğu tüm veriler, mantıksal olarak doğru bir noktada yalnızca çıkış HAREKETİ TAMAMLANMAYA Programcı.
İşlem tamamlandı ise bir Transact-SQLdağıtılmış işlemTAMAMLAMA hareket yürütme hareketine katılan tüm sunucular için iki evreli yürütmeprotokol kullanmak üzere ms dtc tetikler. Yerel işlem aynı örnek üzerinde iki veya daha fazla veritabanları yayılırsa Veritabanı Altyapısı, örnek kullanan bir iç iki evreli yürütme için yürütme tüm veritabanlarını katılan hareket.
İç içe geçmiş hareketler kullanıldığında, iç hareket tamamlama değil kaynaklarını boşaltın veya yapılan değişiklikleri kalıcı hale getirmek.Veri değişiklikleri kalıcı olarak yapılır ve yalnızca dış işlem tamamlanmış olduğunda kaynaklar serbest.Her COMMIT @@ trancount 1'den büyük olduğunda verilen HAREKETİ basitçe azaltır @@ trancount 1.@@ trancount 0'a son olarak küçültülür, tüm dış işlemin kaydedildiğinden.Çünkü transaction_name tarafından göz ardı Veritabanı Altyapısı, 1 ile önemli iç işlemleri yalnızca azaltır @@ trancount, dış bir hareket adı başvuran TAMAMLAMA hareket veren.
@@ trancount 0 sonuçlar bir hata olduğunda bir TAMAMLAMA hareket veren; karşılık gelen BEGIN TRANSACTION vardır.
Veri değişiklikleri veritabanına kalıcı bir parçası yapmış olduğunuz çünkü hareket TAMAMLAMA deyim verildikten sonra bir hareket geri almak yapamazsınız.
Veritabanı Altyapısı , SQL Server 2000 Ve hareket sayısı deyimbaşında 0 olduğunda daha sonra bir deyim içinde hareket sayısı artar.De SQL Server sürüm 7.0, hareket sayısı deyimbaşındaki hareket sayısı ne olursa olsun her zaman olarak artırılır.Bu, düşük Tetikleyicileri @@ trancount tarafından döndürülen değeri neden SQL Server 2000 ve daha çok içinde olduğu SQL Server sürüm 7.0.
İçinde SQL Server 2000 ve daha sonra bir hareket kaydetme veya iş TAMAMLAMA deyim yürütüldüğünde bir tetikleyici ve hiçbir ilgili açık veya örtülü BEGIN TRANSACTION deyim Tetik başında yoktur kullanıcılar olmadığını daha farklı davranışını SQL Server sürüm 7.0.HAREKET TAMAMLAMA veya iş TAMAMLAMA ifadeleri de tetikleyici yerleştirme önerilmez.
İzinler
Üyelik gerektiren public rolü.
Örnekler
A.Bir işlem yapılıyor
Aşağıdaki örnek bir iş aday siler.
USE AdventureWorks2008R2;
GO
BEGIN TRANSACTION;
GO
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
GO
COMMIT TRANSACTION;
GO
B.İç içe geçmiş işlem yapılıyor
Aşağıdaki örnek bir tablooluşturur, üç farklı düzeyde iç içe geçmiş hareketler oluşturur ve sonra iç içe hareketi tamamlar.Ancak her COMMIT TRANSACTION deyim olan bir transaction_name parametresi, arasında hiçbir ilişki yoktur COMMIT TRANSACTION ve BEGIN TRANSACTION ifadeleri.transaction_name Parametreleridir basitçe okunabilirlik yardımları yardımcı Programcı tamamlama uygun sayısını azaltma için kodlanmış emin olmak için @@TRANCOUNT 0 ve böylece yürütme dış işlem.
USE AdventureWorks2008R2;
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
Ayrıca bkz.