首页 > 数据库技术 > 详细

sql server 事务嵌套 并行执行

时间:2014-04-12 18:00:09      阅读:619      评论:0      收藏:0      [点我收藏+]

------外层事务

declare @flag int
set @flag=0

declare @successcount int
set @successcount=0

declare @returnvalue int

begin tran t1
while @flag<10
begin
set @flag=@flag+1

--调用内层事务,存储过程
exec @returnvalue= testpro
@flag=@flag
if @returnvalue=1
begin
set @successcount=@successcount+1
end
end

if @successcount>0
begin
commit tran t1
end
else
begin
rollback tran t1
end

---内层事务(存储过程)


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

alter PROCEDURE [dbo].[testpro]
(
@flag int
)
AS
BEGIN
declare @trancount int
set @trancount= @@trancount
print @trancount

if @trancount>0
begin
--如果事务数大于0 保存事务
save tran outertran
print @@trancount
end
else
begin
--单独调用 开始新事务
begin tran innertran
end
begin try
--执行语句
insert into testtable(id) values(@flag)


--如果执行后 有 条件不合适需要回滚 执行回滚
if @flag not in (2,4,7)
begin
if @trancount>0
begin
rollback tran outertran
return -1
end
else
begin
rollback tran innertran
return -1
end
end
else
begin
--如果执行成功 单独调用 提交事务
if @trancount=0
begin
commit tran innertran
return 0--单独调用 成功返回0
end
--嵌套调用 不提交事务 只返回 状态
else
begin
return 1--循环调用 成功返回1
end
end
end try
begin catch
--有异常 需要回滚
if @trancount>0
begin
rollback tran outertran
return -1--执行失败返回-1
end
else
begin
rollback tran innertran
return -1
end
end catch

END
GO

sql server 事务嵌套 并行执行,布布扣,bubuko.com

sql server 事务嵌套 并行执行

原文:http://www.cnblogs.com/xiguanjiandan/p/3658170.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!