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 的调试价值,能写出更清晰的错误处理逻辑。