设为首页 收藏本站
查看: 665|回复: 0

[经验分享] SQL SERVERC存储过程中捕获异常

[复制链接]

尚未签到

发表于 2016-11-12 06:19:10 | 显示全部楼层 |阅读模式
  创建表t1

CREATE TABLE [dbo].[t1] (
[Id] [int] NOT NULL ,
[c1] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[c2] [datetime] NULL
) ON [PRIMARY]
  创建储存过程P_TestTranscation

create    procedure dbo.P_TestTranscation
as
--   exec TestTranscation
--   select * from t1
--   delete from t1
declare   @iErrorCount   int
set @iErrorCount = 0
begin tran
insert into t1(Id, c1) values(1,'1')
set @iErrorCount=@iErrorCount+@@Error
insert into t1(Id, c1) values(2,'2')
set @iErrorCount=@iErrorCount+@@Error
insert into t1(Id, c1) values('xxxxx9',3)
set @iErrorCount=@iErrorCount+@@Error
insert into t1(Id, c1) values(4,'4')
set @iErrorCount=@iErrorCount+@@Error
insert into t1(Id, c1) values(5,'5')
set @iErrorCount=@iErrorCount+@@error
if @iErrorCount <>0
begin
select 'bbb' as t15
ROLLBACK TRAN
return
end
print 'aaa'
COMMIT TRAN
  此时执行

exec P_TestTranscation
  将出现将 varchar 值 'xxxxx9' 转换为数据类型为 int 的列时发生语法错误。

  存储过程停止执行,存储过程自动结束,当前事物回滚。
  若将

insert into t1(Id, c1) values('xxxxx9',3)改为insert into t1(Id,c1) values(1,3)
  将出现违反了 PRIMARY KEY 约束 'PK_t1'。不能在对象 't1' 中插入重复键。

  存储过程继续执行。

这个错误自然是出在insert这一句,只不过,出错之后,存储过程自动结束,当前事务完成会滚,后面的语句根本就不会执行,自然,事务也无法捕获这个错误了。

当Transact-SQL 语句出现运行时错误时,SQL Server 自动终止T-SqL的执行并回滚到当前事务。这是SQL
Serverd的默认设置,这个设置由参数XACT-ABORT决定的。默认情况下,XACT_ABORT的值为ON,T-SQL自动终止并回滚当前事
务。XACT_ABORT值为OFF时,如果遇到外键约束等参照完整性错误时,只会回滚产生错误的T-SQL语句,而当前事务继续进行处理。而如果遇到很
严重的错误,SQL Server仍会回滚整个事务。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-299013-1-1.html 上篇帖子: ADO.NET 访问 Sql Server2008(一) 下篇帖子: DB2 sql存储过程基础(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表