MSSQL de arkadaşımın aldığı bir hata.
Sık karşılaşılan bir durum olmadığı için yazmak istedim.
Bir tabloya yapılan Insert ‘ün, bir sp’nin exec ‘in sonucu ise ve bu sp exec, içerisinde bir transaction yönetiyorsa, olası bir rollback durumunda bu hata alınmaktadır.
Hatayı üreten yapı aşağıdaki gibidir;
1-) temp bir tablo oluşurun
create table #t ( a int , b int )
2-)Aşağıdaki gibi bir veri kümesi dönen bir sp niz olsun. Bu sp’de transction açıp, Rollback yapacak bir kod bloğu olsun.
create procedure sp
(@startTrx int,
@a int, @b int)
as
begin
select @a, @b union all
select @b, @a
if ( @startTrx = 1 )
begin
begin tran
select @b, @a
rollback
end
end
3-)Aşağıdaki Insert hata üretmez
Insert Into #t
exec sp 0, 2,3
4-)Ama aşağıdaki Insert yukarıdaki hatayı üretir.
Insert Into #t
exec sp 1, 4,5
Çözüm Olarak;
SP de transation yönetmeyin. 😦