İç içe geçmiş hareketleri

Açık hareketler iç içe olabilir.Bu öncelikle bir işlemde zaten bir hareket veya etkin bir işlem yok olan işlemler adlı saklı yordamda işlemleri desteklemek üzere tasarlanmıştır.

Aşağıdaki örnek, iç içe geçmiş hareketler amaçlanan kullanımını göstermektedir.Yordam TransProc it. yürüten işlemin işlem modu ne olursa olsun kendi işlem zorlarIf TransProc is called when a transaction is active, the nested transaction in TransProc is largely ignored, and its INSERT statements are committed or rolled back based on the final action taken for the outer transaction.If TransProc is executed by a process that does not have an outstanding transaction, the COMMIT TRANSACTION at the end of the procedure effectively commits the INSERT statements.

SET QUOTED_IDENTIFIER OFF;
GO
SET NOCOUNT OFF;
GO
USE AdventureWorks2008R2;
GO
CREATE TABLE TestTrans(Cola INT PRIMARY KEY,
               Colb CHAR(3) NOT NULL);
GO
CREATE PROCEDURE TransProc @PriKey INT, @CharCol CHAR(3) AS
BEGIN TRANSACTION InProc
INSERT INTO TestTrans VALUES (@PriKey, @CharCol)
INSERT INTO TestTrans VALUES (@PriKey + 1, @CharCol)
COMMIT TRANSACTION InProc;
GO
/* Start a transaction and execute TransProc. */
BEGIN TRANSACTION OutOfProc;
GO
EXEC TransProc 1, 'aaa';
GO
/* Roll back the outer transaction, this will
   roll back TransProc's nested transaction. */
ROLLBACK TRANSACTION OutOfProc;
GO
EXECUTE TransProc 3,'bbb';
GO
/* The following SELECT statement shows only rows 3 and 4 are 
   still in the table. This indicates that the commit
   of the inner transaction from the first EXECUTE statement of
   TransProc was overridden by the subsequent rollback. */
SELECT * FROM TestTrans;
GO

İç işlemler yapılıyor gözardı edildi tarafından SQL Server Veritabanı Altyapısı.Hareket ya da mı ya da geri en dıştaki işlemin sonunda gerçekleştirilen eylem esas alınırsa.Dış işlem iç iç içe geçmiş hareketler de tamamlanmış demektir.Dış işlem geri alınır, sonra tüm iç hareketleri de geri, olmasa da iç işlemler ayrı ayrı kaydedilmiş bakılmaksızın alınır.

Her HAREKETİ TAMAMLANMAYA veya iş TAMAMLAMA çağrısına son yürütülen BEGIN TRANSACTION için geçerlidir.Sonra BEGIN TRANSACTION deyimlerini geçmişse, COMMIT deyim en içteki hareket olan yalnızca son iç içe geçmiş hareket için geçerlidir.İŞLEM tamamlanmadan, hatta transaction_name deyim içinde iç içe geçmiş bir hareketi dış hareketin hareket adı başvurur, yürütme uygulanır yalnızca en içteki bir hareket.

It is not legal for the transaction_name parameter of a ROLLBACK TRANSACTION statement to refer to the inner transactions of a set of named nested transactions.transaction_name can refer only to the transaction name of the outermost transaction.Geri alma HAREKETİ, transaction_name deyim dış işlem adını kullanarak tüm yürütüldüğünde düzey iç içe geçmiş hareketler küme tüm iç içe geçmiş hareketleri geri. alınırBir geri alma çalışma veya rollback İŞLEMİNİ deyim olmadan, bir transaction_name parametresi herhangi bir düzeyde yürütülen bir küme iç içe geçmiş hareket, bu toplar en dıştaki hareket. dahil olmak üzere, iç içe geçmiş hareketleri tümünü

Geçerli hareketin iç içe @@ trancount işlevini kaydeder düzey.Her BEGIN TRANSACTION deyim @@ trancount bir artırır.Her HAREKETİ TAMAMLANMAYA veya iş TAMAMLAMA deyim azaltır @@ trancount birer birer.Geri alma iş veya rollback İŞLEMİNİ deyim mu bir hareket adı geri alır sahip tüm içiçe olduğunu 0 hareketleri ve azaltır @@ trancount.İç içe geçmiş hareketler küme içinde en dıştaki hareketin hareket adı kullanan bir rollback İŞLEMİNİ geldiğinde tüm iç içe geçmiş hareketleri ve azaltır @@ trancount 0 olarak yedekleyin.select @@ 1 ya da daha fazla olup olmadığını belirlemek için trancount bir harekette zaten ise kullanacağınızdan emin olduğunuzda.@@ trancount 0 ise, sizin bir hareket değildir.