SQL Server @@ERROR 用法

@@error是系统函数,当没有发生错误时返回0,如果发生错误时@@error<>0,并返回错误号,每个SQL语句执行完,@@error值都会变。

@@error只记录当前错误,如果存储过程执行多个操作,就要每次都判读@@error是否出现错误,比较麻烦。
今天就遇到这个问题了,下面是一个简单的例子,就可以解决这个问题。


create  proc proc_Test
--根据ID修改表
@id int ,          --id
@name varchar(20)   --名字
as
begin transaction
declare @errors int        --错误数

--根据id修改
 update table1  set name=@name where id=@id
--设置接受错误数
set @errors=@errors+@@error

r

--查询销售id
select  @xsbfid =id from receipt2 where sn=@sn
set @errors=@errors+@@error

--插入样机表
insert into table2
(name )values(@name)
set @errors=@errors+@@error

if (@errors<>0)
begin
    rollback  transaction 
end
else
begin
    commit transaction 
end

只是声明了一个变量,每次用它来累积错误值。嘻嘻,问题就解决了。

http://blog.163.com/happy_2010_zyj/blog/static/151148756201041044646221/

 

 

@@ERROR:当前一个语句遇到错误,则返回错误号,否则返回0。需要注意的是@ERROR在每一条语句执行后会被立刻重置,因此应该在要验证的语句执行后检查数值或者是将它保存到局部变量中以备将来使用。

 

复制代码
复制代码
DECLARE @num INT,@temp INT
DECLARE @err INT

SELECT @temp=0;
SET @err=0 
SET @num =2/@temp; 
 --执行后@@ERROR为8134

PRINT @@ERROR
 --执行后@@ERROR为0 
IF @@ERROR = 0 
BEGIN 
    PRINT @@ERROR 
END
复制代码
复制代码

分析:上面的SQL语句出现除0的错误,抛出错误信息,所以在执行除0语句后的@@Error数值是8134,但是在执行第一个Print @Error语句输出错误信息之后,注意,此时@@Error的数据立即变成了0!,这一点非常重要,因为@@Error在每一条语句执行后立刻被重置!同样的道理,执行IF @@ERROR = 0语句后@@ERROR的数值仍然是0,因为这句话也没有发生错误!

  

posted on   大西瓜3721  阅读(1147)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2018-01-03 js实现完美身份证号有效性验证
2018-01-03 MVC 部分视图

导航

点击右上角即可分享
微信分享提示