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

时间:2016-11-24 11:18:02

标签: sql sql-server tsql sql-server-2016 raiserror

MSDN说明了以下语法:

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

msg_str要求字符串最多为2047个字符,但会截断更长的字符串。它还可以替换参数,这会截断消息,而不是值提供的字符数:

  

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

Msg 102,Level 15,State 1,Line 1

     

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

DECLARE @err_message nvarchar(255);
SET @err_message = 'Test';
RAISEERROR(@err_message, 20, 1);
  

Msg 102,Level 15,State 1,Line 3

     

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

我可以很好地执行各种其他查询。 E.g:

THROW 50001, 'Test', 1;
  

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位) 9600:)

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

这里发生了什么?

1 个答案:

答案 0 :(得分:22)

文档:

  

MSDN声明了以下语法:

     
    

RAISERROR

  

你的命令:

  

RAIS E 错误('测试',20,1);

总是犯了这个错误。该命令不是“提升错误”,而是“Rais错误”。我不知道为什么,但我们坚持不懈......