1.@@error函数,在一个事务中会累加吗
例如:
begin tranupdate a set a='xx' where b=3
update a set a='xx1' where b=4if @error <> 0
rollback
else
commit里面有2条语句,@error检测的是第二条的错误还是第一条 还是他们2个都检测后的累加?2.mssql的报错信息,执行的时候有的错误虽然产生了,但是不会中断,会继续执行下面的代码,有的则不是,直接中断,什么样的错误会中断,哪里可以查得到。存储过程中的错误呢是否中断是根据什么判断的?
例如:
begin tranupdate a set a='xx' where b=3
update a set a='xx1' where b=4if @error <> 0
rollback
else
commit里面有2条语句,@error检测的是第二条的错误还是第一条 还是他们2个都检测后的累加?2.mssql的报错信息,执行的时候有的错误虽然产生了,但是不会中断,会继续执行下面的代码,有的则不是,直接中断,什么样的错误会中断,哪里可以查得到。存储过程中的错误呢是否中断是根据什么判断的?
declare @i int,@j int,@result int
select @i=1,@j=0
set @result=@i/@j
print @@error--此处的@@error是计算结果:8134
print @@error--此处是执行上一个print @@error是否有错,所以结果为0
http://www.cnblogs.com/zhuifengnianshao/archive/2010/11/24/1886939.html
不知道对不对
--我已经看了,那个例子我敢保证是错的,如果你有多条sql操作语句的话,你一定要定义一个变量,在每次执--行完成以后,@err=@err+@@error,这样你才判断@err<>0才能保证事务的回滚。
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
@@ERROR
返回类型
integer备注
如果前一个 Transact-SQL 语句执行没有错误,则返回 0。内容来自联机丛书,楼主看一下吧。@@error是怎么定义的
比如alter和select操作错误的严重性不一样
一般情况一堆alter 操作中只要有一条语句出错,之后的就不会执行而select操作就会还有就是你可以用transaction 和 try catch来控制这些语句,避免出错后还执行之后的操作
--用transaction 和 try catch来控制这些语句,避免出错后还执行之后的操作 正确--但是并不是select出现错误后面的不执行了。
--:sql的最小执行单元应该是1个批处理。
------------------1------------------
select * from abc
select * from #t1
---------------------
abc 不存在的情况,执行结果如下:消息 208,级别 16,状态 1,第 1 行
对象名 'abc' 无效。
------------------2------------------
select * from abc
go
select * from #t1----------------执行结果如下:消息 208,级别 16,状态 1,第 1 行
对象名 'abc' 无效。(5 行受影响)