MSDN声明以下语法:
RAISERROR ( { msg_id | msg_str | @local_variable }
{ ,severity ,state }
[ ,argument [ ,...n ] ] )
[ WITH option [ ,...n ] ]
msg_str
需要一个最多 2047 个字符的字符串,但会截断更长的字符串。它还可以替换参数,这会比值提供的字符数进一步截断消息:
错误消息最多可包含 2,047 个字符。如果消息包含 2,048 个或更多字符,则仅显示前 2,044 个字符并添加省略号以指示消息已被截断。请注意,由于内部存储行为,替换参数消耗的字符比输出显示的要多。例如,赋值为 2 的 %d 替换参数实际上会在消息字符串中产生一个字符,但在内部也会占用三个额外的存储字符。此存储要求减少了消息输出的可用字符数。当指定 msg_str 时,RAISERROR 引发错误编号为 50000 的错误消息。
severity
期望一个介于 0 到 25 之间的数字,但更正其他数字:
任何用户都可以指定从 0 到 18 的严重级别。从 19 到 25 的严重级别只能由 sysadmin 固定服务器角色的成员或具有 ALTER TRACE 权限的用户指定。对于从 19 到 25 的严重级别,需要 WITH LOG 选项。小于 0 的严重级别被解释为 0。大于 25 的严重级别被解释为 25。
state
期望值 0 到 255,但更正零以下值:
[state] 是从 0 到 255 的整数。负值默认为 1。不应使用大于 255 的值。
问题
运行这些查询时出现以下错误:
RAISEERROR('Test', 20, 1);
消息 102,第 15 级,状态 1,第 1 行
“测试”附近的语法不正确。
DECLARE @err_message nvarchar(255);
SET @err_message = 'Test';
RAISEERROR(@err_message, 20, 1);
消息 102,第 15 级,状态 1,第 3 行
'RAISEERROR' 附近的语法不正确。
我可以很好地执行各种其他查询。例如:
THROW 50001, 'Test', 1;
消息 50001,第 16 层,状态 1,第 1 行
测试
更多信息
SELECT @@VERSION
产生这个:
Microsoft SQL Server 2016 (RTM-GDR) (KB3194716) - 13.0.1722.0 (X64) 2016 年 9 月 26 日 13:17:23 版权所有 (c) Microsoft Corporation Express Edition (64-bit) on Windows 8.1 Pro 6.3 (Build 9600: )
MSDN 语法是针对“ SQL Server(从 2008 年开始) ”的,在撰写本文时,这篇文章已经更新October 19, 2016
,这是在我运行的 SQL Server 版本发布几个月后。
这里发生了什么?