有没有一种方法可以立即停止SQL server中SQL脚本的执行,比如"中断"或"退出"命令?
我有一个脚本,在开始执行插入之前进行一些验证和查找,如果任何验证或查找失败,我希望它停止.
有没有一种方法可以立即停止SQL server中SQL脚本的执行,比如"中断"或"退出"命令?
我有一个脚本,在开始执行插入之前进行一些验证和查找,如果任何验证或查找失败,我希望它停止.
The 100 method
raiserror('Oh no a fatal error', 20, -1) with log
这将终止连接,从而停止脚本的其余部分运行.
请注意,严重级别20或更高以及WITH LOG
选项都是以这种方式工作所必需的.
这甚至适用于GO语句,例如.
print 'hi'
go
raiserror('Oh no a fatal error', 20, -1) with log
go
print 'ho'
将为您提供以下输出:
hi
Msg 2745, Level 16, State 2, Line 1
Process ID 51 has raised user error 50000, severity 20. SQL Server is terminating this process.
Msg 50000, Level 20, State 1, Line 1
Oh no a fatal error
Msg 0, Level 20, State 0, Line 0
A severe error occurred on the current command. The results, if any, should be discarded.
请注意,没有打印"ho".
注意事项:
The noexec method
另一种适用于GO语句的方法是set noexec on
.这会导致跳过脚本的其余部分.它不会终止连接,但在执行任何命令之前,您需要再次关闭noexec
.
例子:
print 'hi'
go
print 'Fatal error, script will not continue!'
set noexec on
print 'ho'
go
-- last line of the script
set noexec off -- Turn execution back on; only needed in SSMS, so as to be able
-- to run this script again in the same session.