17

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) o​​n Windows 8.1 Pro 6.3 (Build 9600: )

MSDN 语法是针对“ SQL Server(从 2008 年开始) ”的,在撰写本文时,这篇文章已经更新October 19, 2016,这是在我运行的 SQL Server 版本发布几个月后。

这里发生了什么?

4

1 回答 1

57

文档:

MSDN 声明以下语法:

提升错误

你的命令:

RAIS E ERROR('测试', 20, 1);

总是犯这个错误。该命令不是“引发错误”,而是“引发错误”。我不知道为什么,但我们被它困住了......

于 2016-11-24T11:42:54.110 回答