我有一个包含多个更新和插入查询的SP。如果任何查询给出错误,执行是否会移到下一个语句?例如,
CREATE PROCEDURE Test()
AS
BEGIN
INSERT INTO SomeTable VALUES (1, 2, 3)
UPDATE SomeTable SET X = 4 WHERE Y = 5
END
在上面的例子中,如果INSERT语句抛出错误,执行会移到下一个UPDATE语句吗?
答案 0 :(得分:1)
这取决于error severity。从严重级别19开始,批次将中止:
表示已经存在不可配置的数据库引擎限制 超出并且当前批处理已终止。错误 严重性级别为19或更高的消息将停止执行 当前批次。
但请注意,如果上面的代码在BEGIN TRY/BEGIN CATCH
块内运行(或从这样的块中调用),则严重性为10-18的错误会导致控制流跳转到catch块(即不与说执行中止相同)因此下一个语句不将被执行。
此外,XACT_ABORT
设置还会导致当前事务回滚和当前批次中止。
如果您需要有关如何编写固态存储过程代码的模板,请参阅Exception handling and nested transactions