aşağıdaki kodu bakın:İlk işlem; taahhüt iki işlemler
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
alter PROCEDURE TestProc
AS
BEGIN
begin try
SET NOCOUNT ON;
--SET XACT_ABORT on;
set transaction isolation level read committed
create table #Test (id int)
begin transaction
insert into #Test values (1)
begin transaction
insert into #Test values (2)
commit
select * from #test
commit
select * from #test
end try
begin catch
print 'got here 1'
end catch
END
GO
bundan denir:
begin try
exec TestProc
end try
begin catch
print @@TRANCOUNT
end catch
çıktısı:
table 1:
1
2
table 2:
1
2
Neden ilk taahhüt etmez; Her iki işlemi de yapalım mı? Lütfen şu bağlantıya bakın: http://www.codeproject.com/Articles/4451/SQL-Server-Transactions-and-Error-Handling, "Bir dizi işlemin ne kadar derin olursa olsun, sadece son COMMIT'in bir etkisi vardır."
table 1
1
"Yalnızca son COMMIT'in herhangi bir etkisi vardır" yalnızca son COMMIT'in "dış dünya" ile ilgili olduğu kadar bir COMMIT olduğu anlamına gelir. İç işlemlerde meydana gelen hiçbir şeyin dış işlem kapsamında gerçekleşmediği anlamına gelmez. –
SQL Server'da iç içe geçmiş işlemler bir efsane. Beklediğiniz şeylere bile yaklaşmıyorlar. Paul Randal'ın konuyla ilgili blogunu okuyun. http://www.sqlskills.com/blogs/paul/a-sql-server-dba-myth-a-day-2630-nested-transactions-are-real/ –