博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql server 事务嵌套 并行执行
阅读量:5884 次
发布时间:2019-06-19

本文共 1282 字,大约阅读时间需要 4 分钟。

------外层事务

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

转载于:https://www.cnblogs.com/xiguanjiandan/p/3658170.html

你可能感兴趣的文章
在ubuntu下安装和配置vsftpd
查看>>
c#中结构体和类的比较
查看>>
Linux磁盘配额
查看>>
JQuery UI的拖拽功能
查看>>
数据驱动销售——个性化推荐引擎
查看>>
C语言标准库函数qsort那点小事
查看>>
HL7 CDA高级培训
查看>>
Android 调用照相机拍照
查看>>
linux的C获取shell执行返回的结果
查看>>
Shell读取文件内容
查看>>
面对我们喜欢的和我们需要的,应该何去何从?
查看>>
list集合绑定在datagridview上时如何实现排序
查看>>
Codeforces Round #346 (Div. 2) G. Fence Divercity dp
查看>>
python random
查看>>
TortoiseGit学习系列之TortoiseGit基本操作将提交到本地的项目推送到在线仓库(图文详解)...
查看>>
关于spring mybateis 定义resultType="java.util.HashMap"
查看>>
『TensorFlow』读书笔记_Inception_V3_上
查看>>
python爬虫从入门到放弃(四)之 Requests库的基本使用(转)
查看>>
程序员怎么留住健康?
查看>>
【ANT】ant使用
查看>>