--------------------------------------------------------
--代码1
use northwind
insert into region values(1,'2424')
select 'aa'
insert into region values(42,'2424')
select 'aa'
--------------------------------------------------------
同时执行上面四条语句,执行第一条时提示出错,
出错后继续执行第二、第三、第四条语句,
SQLSERVER在错误处理方面与很多高级编程语言不一样,高级语言(VB、C#等)里,
当一条语句出错,则程序终止执行,立即转到错误处理处,
--------------------------------------------------------
--代码2
use northwind
insert into region values(1,'2424',24,43)
select 'aa'
insert into region values(42,'2424',24,43)
select 'aa'
--------------------------------------------------------
执行上面的语句,发现一条语句都没执行,包括第一条语句都没执行,
因为这属于编译错误,编译期错误不会执行任何语句。
而第一段代码是运行时错误,如果要求出现运行时错误就立即终止执行,需要用:
--------------------------------------------------------
--代码3
set xact_abort on --设置出错后终止执行
use northwind
print '1'
insert into region values(1,'2424') --执行到这里出错,
print '2'
insert into region values(42,'2424')
print '3'
--------------------------------------------------------
上面的语句,设置:set xact_abort on
执行到出错语句后,后面的语句都不执行了。
--------------------------------------------------------
set xact_abort on
use northwind
print '1'
raiserror('1413',14,1)
print '2'
insert into region values(42,'2424')
print '3'
--------------------------------------------------------
上面语句,设置:set xact_abort on
抛出自定义错误,抛出后,后面的语句还是一样继续执行。
另外,对于@@error,只能在执行语句后就立即查看@@error,如果又执行了其它语句,@error会重置的。