TAMAMLAMA hareket (Transact-sql)

Başarılı bir açık veya örtülü hareket sonunu. @@ trancount 1 ise, COMMIT TRANSACTION veritabanına kalıcı bir parçası hareket başlangıç boşaltır beri azaltır @@ trancount 0 ve hareket tarafından tutulan kaynakları gerçekleştirilen tüm veri değişiklikleri yapar. @@ trancount 1'den büyükse, COMMIT TRANSACTION azaltır @@ trancount yalnızca 1 ve hareket tarafından etkin kalır.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

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_namebir önceki BEGIN TRANSACTION tarafından atanan bir işlem adını belirtir. transaction_name* *tanımlayıcıları kuralları uyması gerekir, ancak 32 karakterden uzun olamaz. transaction_nameBEGIN TRANSACTION COMMIT TRANSACTION ilişkili olduğu yer programcılara belirterek bir okunabilirlik yardım olarak kullanılabilir.

  • @tran\_name\_variable
    Geçerli bir işlem adı olan kullanıcı tanımlı bir değişkenin adıdır. Değişken ile bildirilmeli bir char, varchar, nchar, ya nvarcharveri türü. Değişken için birden fazla 32 karakter aktarılırsa sadece 32 karakter kullanılacaktır; kalan karakterler kesilir.

Açıklamalar

Sorumluluğu olduğunu Transact-SQLhareket tarafından başvurulan tüm verileri mantıksal olarak doğru olduğunda yalnızca bir noktada COMMIT TRANSACTION vermek için programcı.

Kaydedilmiş hareket ise bir Transact-SQLDağıtılmış işlem, COMMIT TRANSACTION tetikleyen iki evreli tamamlama iletişim kuralının tüm sunucular harekette yer alan taahhüt kullanabilmek için ms DTC'yi. Aynı örneği üzerinde iki veya daha fazla veritabanları yerel bir işlem yayılıyorsa, Veritabanı Altyapısı, iç iki evreli tamamlama için taahhüt tüm veritabanları harekette yer alan örneği kullanır.

İç içe geçmiş hareketler kullanıldığında, iptalleri iç hareketlerin ücretsiz kaynaklar değil veya onların değişiklikleri kalıcı yapmak. Veri değişiklikleri kalıcı yapılır ve yalnızca dış işlem tamamlanmış olduğunda kaynaklar serbest. Her @@ trancount 1'den büyük olduğunda verilen TRANSACTION COMMIT sadece azaltır @@ trancount tarafından 1. @@ trancount nihayet sıfıra indirildiği zaman, tüm dış hareket kararlıdır. Çünkü transaction_nametarafından göz ardı Veritabanı Altyapısı, 1 tarafından seçkin iç işlemler sadece azaltır @@ trancount varken bir dış işlem adı başvuran COMMIT TRANSACTION vermek.

@@ trancount 0 sonuç hata olduğunda bir COMMIT TRANSACTION vermek; Orada karşılık gelen BEGIN TRANSACTION vardır.

Veri değişiklikleri veritabanına kalıcı bir parçası yapılan çünkü COMMIT TRANSACTION deyimi verildikten sonra bir hareketi geri alamazsınız.

Veritabanı AltyapısıYalnızca hareket sayısı 0 deyimini başında ise bir deyimi içinde hareket sayısı artar.

İzinler

Üyelik Genel rolü.

Örnekler

A.Bir işlem yapılıyor

Aşağıdaki örnek, bir iş aday siler.

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

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

B.Bir iç içe geçmiş işlem yapılıyor

Aşağıdaki örnek bir tablo oluşturur, üç düzeyde iç içe geçmiş hareketleri oluşturur ve sonra iç içe hareketi tamamlar. Her ne kadar her COMMIT TRANSACTIONdeyimi vardır bir transaction_nameparametresi, arasında hiçbir ilişki COMMIT TRANSACTIONve BEGIN TRANSACTIONdeyimleri. transaction_nameParametreleridir sadece okunabilirlik AIDS iptalleri uygun sayısını azaltmak için kodlanır sağlamak Programcı Yardım @@TRANCOUNT0 ve dolayısıyla dış hareketi tamamlamak.

USE AdventureWorks2012;
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

USE AdventureWorks2012;
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.

Başvuru

BEGIN dağıtılmış hareket (Transact-sql)

BEGIN TRANSACTION (Transact-SQL)

COMMIT work (Transact-sql)

rollback TRANSACTION (Transact-sql)

rollback work (Transact-sql)

HAREKET (Transact-sql) Kaydet

@@ trancount (Transact-sql)