日期:2014-05-18  浏览次数:20481 次

求教几个百度上未给出明确答案的问题
1.@@error函数,在一个事务中会累加吗
例如:
begin tran

update a set a='xx' where b=3
update a set a='xx1' where b=4

if @error <> 0
rollback 
else 
commit

里面有2条语句,@error检测的是第二条的错误还是第一条 还是他们2个都检测后的累加?

2.mssql的报错信息,执行的时候有的错误虽然产生了,但是不会中断,会继续执行下面的代码,有的则不是,直接中断,什么样的错误会中断,哪里可以查得到。存储过程中的错误呢是否中断是根据什么判断的?




------解决方案--------------------
探讨
实际测试了一下 事务中 也是一样 但是网上有这么一贴,,
http://www.cnblogs.com/zhuifengnianshao/archive/2010/11/24/1886939.html
不知道对不对

------解决方案--------------------
SQL code

begin tran
declare @err int
set @err=0
update a set a='xx' where b=3
set @err=@err+@@error
update a set a='xx1' where b=4
set @err=@err+@@error
if @err <> 0
rollback  
else  
commit

------解决方案--------------------
SQL code

--用transaction 和 try catch来控制这些语句,避免出错后还执行之后的操作 正确

--但是并不是select出现错误后面的不执行了。
--:sql的最小执行单元应该是1个批处理。

------解决方案--------------------
SQL code

------------------1------------------
select * from abc
select * from #t1
---------------------
abc 不存在的情况,执行结果如下:

[color=#FF0000]消息 208,级别 16,状态 1,第 1 行
对象名  'abc' 无效。[/color]
------------------2------------------
select * from abc
go
select * from #t1

----------------执行结果如下:

消息 208,级别 16,状态 1,第 1 行
对象名  'abc' 无效。

[color=#FF0000](5 行受影响)[/color]