Cannot use the ROLLBACK statement within an INSERT-EXEC statement


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. 😦

Etiketler: ,

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.


%d blogcu bunu beğendi: