我们一般用这种方式抛出异常:
RAISERROR (@ErrorMsg, 16, 1)
1, 如果我们在存储过程里面加了Try Catch模块, 那么执行到RAISERROR时会直接跳转到Catch模块里面.
例如:
DECLARE @ErrorMsg VARCHAR(2000)
BEGIN TRY
SELECT 1
RAISERROR ('报错了', 16, 1)
SELECT 2
END TRY
BEGIN CATCH
SELECT @ErrorMsg = ERROR_MESSAGE()
RAISERROR (@ErrorMsg, 16, 1)
END CATCH
上述代码不会执行Select 2
2, 如果我们在存储过程里面没有加Try Catch模块.
例如:
SELECT 1
RAISERROR ('报错了', 16, 1)
SELECT 2
上述代码执行顺序是:
Select 1
抛出异常
Select 2
这里的 Select 2 在绝大多数很多情况下是不需要执行的,
所以我们可以这样写
SELECT 1
RAISERROR ('报错了', 16, 1)
RETURN
SELECT 2
但是我们推荐尽量使用Try Catch模块