use*_*392 5 sql-server execution
如果我执行此批次:
begin transaction
PRINT 'start'
PRINT 1/0
PRINT 'continue'
drop table dbo.tblPrueba
select * from dbo.tblPrueba
PRINT 'finish'
rollback transaction
Run Code Online (Sandbox Code Playgroud)
输出是这样的:
start
Msg 8134, Level 16, State 1, Line 3
Divide by zero error encountered.
continue
Msg 208, Level 16, State 1, Line 6
Invalid object name 'dbo.tblPrueba'.
Run Code Online (Sandbox Code Playgroud)
我强迫两个错误: - 第一个:PRINT 1/0(生成此错误:
Msg 8134, Level 16, State 1, Line 3
Divide by zero error encountered.
Run Code Online (Sandbox Code Playgroud)
)并继续执行批处理
- 第二个:
drop table dbo.tblPrueba
select * from dbo.tblPrueba
Run Code Online (Sandbox Code Playgroud)
这会产生此错误:
Msg 208, Level 16, State 1, Line 6
Invalid object name 'dbo.tblPrueba'.
Run Code Online (Sandbox Code Playgroud)
并停止执行批处理
他们之间有什么不同?我在哪里可以学习停止执行的那些和那些没有执行的?
非常感谢!!
Mic*_*son 10
由于第一个错误是除零错误,此行为取决于您的ARITHABORT,ARITHIGNORE和ANSI_WARNINGS设置.
来自文章:
这三个SET命令可以为一小组错误提供非常细粒度的控制.当除零或溢出发生时,有四个选择.
- 完全没有动作,结果为NULL - 当ARITHIGNORE为ON时.
- 警告消息,结果为NULL - 全部为OFF时.
- 语句终止 - ANSI_WARNINGS为ON时.
- 批量中止 - 当ARITHABORT为ON且ANSI_WARNINGS为OFF时.
至于哪些错误停止执行以及哪些错误不执行,请参阅同一篇文章.
| 归档时间: |
|
| 查看次数: |
2688 次 |
| 最近记录: |