T-SQL中的异常处理 - 多个消息与多个状态?

时间:2017-06-03 15:30:10

标签: sql-server

我有一个存储过程可能由于多种原因而失败:

  • 参数的值为零。
  • 表A中的外键违规。
  • 表B中的外键违规。
  • 表C中的唯一约束违规。

就“最佳做法”而言,我应该使用错误状态或错误消息来通知最终用户此问题吗?

我知道状态用于指示实际代码中发生错误的位置,但对于最终用户而言,如果没有某种文档,它就无用。

sys.messages中输入一个条目似乎对于数据库中每个存储过程/触发器的每个可能的失败案例都是过度的。

我应该这样做:

THROW 50001, 'Parameter value cannot be 0', 1
THROW 50002, 'Matching value not found in table A', 1
THROW 50003, 'Matching value not found in table B', 1
THROW 50004, 'Combination of values already exists in table C.', 1

或者这个:

THROW 50001, 'An error occurred in the procedure.', 1
THROW 50001, 'An error occurred in the procedure.', 2
THROW 50001, 'An error occurred in the procedure.', 3
THROW 50001, 'An error occurred in the procedure.', 4

0 个答案:

没有答案