关于存储过程中RAISERROR的使用



我们一般用这种方式抛出异常:
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模块

猜你喜欢

转载自zheyiw.iteye.com/blog/2350900