SQL存储过程递归下的事务处理(本身的缺陷还是蛮大的)
2010-12-13 14:27:52| 分类:
SQL
| 标签:
|举报
|字号大中小 订阅
ALTER proc [dbo].[test]
@a nvarchar(3)
as
declare @sqlstr nvarchar(4000);
set @sqlstr = '
declare @nestedFlag bit;
if(@@trancount>0)
begin
set @nestedFlag=1;
SAVE TRAN a' + @a + ';
print @nestedFlag;
end
ELSE
BEGIN
SET @nestedFlag=0;
BEGIN TRAN b;
print @nestedFlag;
END
begin try
if(@a < 15)
begin
print @a;
set @a = @a + 1;
insert into dbo.testTable (testData1) values (@a);
exec test @a;
end
if(@nestedFlag=0)
BEGIN
COMMIT TRAN b;
END
end try
begin catch
if(@nestedFlag<>0)
ROLLBACK TRAN a' + @a + ';
else
rollback tran b;
end catch'
exec sp_executesql @sqlstr, N'@a nvarchar(10)', @a;
调用:exec test '1';
结论 只执行10次 超出就自动rollback了~ 也就是说最多只能开10个记录点 递归的上限是32次~
评论这张
转发至微博
转发至微博
评论