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发布后的几个月版本我正在运行。
这里发生了什么?
答案 0 :(得分:22)
文档:
MSDN声明了以下语法:
RAISERROR
你的命令:
RAIS E 错误('测试',20,1);
我总是犯了这个错误。该命令不是“提升错误”,而是“Rais错误”。我不知道为什么,但我们坚持不懈......