Raiserror ('', 15, 1)自定义错误时,若错误ID在18以下。则SQL默认为不严重的错误。此时存储过程还能继续往下运行;若错误ID在20以上则存储过程直接退出。当使用 ID》18以上的错误时,必须使用 with log 记录。eg Raiserror ('', 20, 1) with log
同样,在嵌套条用存储过程时,若子存储过程诱发ID20以上的错误,则整个存储进程在此错误处中止。
若在事务中处理中调用Raiserro自定义错误,则事务不会进行回滚。需自己设置事务回滚条件。
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
Alter Procedure [dbo].[TestError]
as
begin
set xact_abort on
begin tran
print 'aa'
raiserror('自定义错误',15,1) with log
print 'bb'
exec TestErrorSon
print 'cc'
if @@Error <>0
begin
print 'Roll'
rollback tran
end
else
commit tran
end
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
Alter Procedure [dbo].[TestErrorSon]
as
begin
begin tran
print 'aaSun'
raiserror('自定义错误Sun',15,1) with log
print 'bbSun'
if @@Error<>0
begin
print 'RollSon'
rollback tran
end
else
commit tran
end
2.select @@Indetity 无论存储过程是否提交,均能得到 新生成的ID