惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
B
Blog RSS Feed
Recent Announcements
Recent Announcements
Vercel News
Vercel News
M
MIT News - Artificial intelligence
阮一峰的网络日志
阮一峰的网络日志
L
LangChain Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Security Blog
Microsoft Security Blog
H
Help Net Security
T
The Blog of Author Tim Ferriss
Y
Y Combinator Blog
G
Google Developers Blog
罗磊的独立博客
爱范儿
爱范儿
宝玉的分享
宝玉的分享
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园_首页
S
SegmentFault 最新的问题
WordPress大学
WordPress大学
月光博客
月光博客
人人都是产品经理
人人都是产品经理
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - eyye的眼睛

又到清明节 sql中去除重复的项 戒烟吧 李开复:如何设计你的2015年度计划 网易邮箱已经忘记了客户 用程序集编写clr表值函数:把正则表达式引入数据库中 从天气网提取气象预报数据 sql 几点记录 sql 重复数据只保留一条 (转)android-sdk_r20.0.3-windows无法正常更新 RichTextBox的拖放功能DragDrop 合并两个rtf文件 杀掉叽哩瓜叽(jlguaji.exe)的两种方法 股票数据(转) word转化为图片(2) 如何将格式文本转化为图片 sql IN语句如何优化?(转) 向EXCEL批量导出数据(转) 禅语
SQL Server 的事务处理的两种格式
eyye的眼睛 · 2011-10-14 · via 博客园 - eyye的眼睛

一种是用TRY...CATCH语句,例:

---这仅仅是实例
create procedure [dbo].[MyTryTran] --创建存储过程
--
@toID int, --接收转账的账户
--
@fromID int , --转出自己的账户
--
@momeys money --转账的金额
as
begin transaction
BEGIN TRY
     select 1/0
     insert into t_Sex (FID,FSex) values (3,'na')
commit transaction
END TRY
BEGIN CATCH
begin
rollback transaction
end
END CATCH

第二种是捕捉error错误

create procedure [dbo].[MyTran] --创建存储过程,定义几个变量
--@toID int,    --接收转账的账户
--@fromID int ,  --转出自己的账户
--@momeys money --转账的金额
as 
begin transaction
	declare @errorSum int    --定义变量,用于累计事务执行过程中的错误
	set @errorSum=0
      select 1/0
	set @errorSum=@errorSum+@@error --累计是否有错误

	insert into t_Sex (FID,FSex) values ('3','n')
	set @errorSum=@errorSum+@@error    --累计是否有错误
if @errorSum>0
    begin        
        rollback transaction
    end
else
    begin        
        commit transaction
    end

有一种错误的方式,请看:

alter procedure [dbo].[MyErrorTran] 
as 
begin transaction	
	select 1/0
	insert into t_Sex (FID,FSex) values ('3','n')
	commit transaction
if @@error>0            
	rollback transaction

--事实上不管用,因为@@error只对上一条语句管用,所以在本例中尽管发生了错误,但还是不会回滚