RAISERROR 的三个参数是什么?

RAISERROR 是 SQL Server 中用于抛出错误的语句。它的基本语法:

RAISERROR (msg_str | msg_id, severity, state [, argument_list]);

最常用的三个参数是:消息(msg_str 或 msg_id)、严重级别(severity)、状态(state)。

一、参数详解

1. 消息(msg_str / msg_id)

可以是字符串常量或 sys.messages 中的消息 ID。字符串支持 %s、%d 等占位符,配合 argument_list 使用。

RAISERROR ('用户 %s 不存在', 16, 1, 'admin');

2. 严重级别(severity)

  • 0-10:信息性消息,不中断执行。
  • 11-16:用户可修正的错误(如约束违反)。
  • 17-19:资源/软件错误,需 DBA 处理。
  • 20-25:致命错误,连接终止(需 sysadmin 权限)。

3. 状态(state)

1-255 的整数,用于标识错误发生位置,便于调试。同一错误可设不同 state 区分调用路径。

二、WITH 选项

  • WITH NOWAIT:立即发送消息到客户端,不缓冲。
  • WITH SETERROR:设置 @@ERROR 和 ERROR_NUMBER()。
  • WITH LOG:写入 SQL Server 错误日志和 Windows 事件日志。

三、RAISERROR vs THROW

SQL Server 2012+ 推荐用 THROW,语法更简单,能保留原始错误堆栈。RAISERROR 仍广泛用于老代码和需要自定义消息的场景。

THROW 50000, '自定义错误', 1;

四、总结

RAISERROR 的三个核心参数是消息、严重级别、状态。理解 severity 的分级和 state 的调试价值,能写出更清晰的错误处理逻辑。