根据MSDN的指导,TSQL RaiseError语法不正确

Ask*_* B. 10 sql t-sql sql-server raiserror sql-server-2016

MSDN声明以下语法:

RAISERROR ( { msg_id | msg_str | @local_variable }  
{ ,severity ,state }  
[ ,argument [ ,...n ] ] )  
[ WITH option [ ,...n ] ] 
Run Code Online (Sandbox Code Playgroud)

msg_str预计一个字符串,最多2047个字符,但截断长字符串.它还可以替换参数,这会截断消息,而不是值提供的字符数:

错误消息最多可包含2,047个字符.如果消息包含2,048个或更多字符,则仅显示前2,044个字符,并添加省略号以指示消息已被截断.请注意,由于内部存储行为,替换参数消耗的字符数多于输出显示的字符数.例如,%d的替换参数(指定值为2)实际上会在消息字符串中生成一个字符,但内部还会占用另外三个存储字符.此存储要求会减少消息输出的可用字符数.指定msg_str时,RAISERROR会引发错误消息,错误编号为50000.

severity预计25 0之间的数字,但更正其他号码:

任何用户都可以指定从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);
Run Code Online (Sandbox Code Playgroud)

Msg 102,Level 15,State 1,Line 1

'Test'附近的语法不正确.


DECLARE @err_message nvarchar(255);
SET @err_message = 'Test';
RAISEERROR(@err_message, 20, 1);
Run Code Online (Sandbox Code Playgroud)

Msg 102,Level 15,State 1,Line 3

'RAISEERROR'附近的语法不正确.


我可以很好地执行各种其他查询.例如:

THROW 50001, 'Test', 1;
Run Code Online (Sandbox Code Playgroud)

Msg 50001,Level 16,State 1,Line 1

测试


更多信息

SELECT @@VERSION 产生这个:

Microsoft SQL Server 2016(RTM-GDR)(KB3194716) - 13.0.1722.0(X64)2016年9月26日13:17:23版权所有(c)Windows 8.1 Pro 6.3上的Microsoft Corporation Express Edition(64位)(Build 9600:)

MSDN语法适用于" SQL Server(从2008开始) ",截至撰写时,文章已更新October 19, 2016,这是我运行的SQL Server版本发布后的几个月.

这里发生了什么?

Aak*_*shM 29

文档:

MSDN声明以下语法:

RAISERROR

你的命令:

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

总是犯这个错误.该命令不是"提升错误",而是"Rais错误".我不知道为什么,但我们坚持下去......

  • 这是"RaIsError"指的是埃及太阳神[Ra](https://en.wikipedia.org/wiki/Ra)所犯的错误.容易记住.您是否建议我们聚在一起为微软购买元音,以便将其更改为其他内容? (9认同)