这种未记录的RAISERROR语法是否曾被记录并随后被弃用?

Ed *_*per 11 sql-server error-handling

我正在开发一个大型SQL Server代码库,其中一些代码库至少从SQL 7开始就已经开发了.

在整个代码库,产生错误的方法是使用下面的语法是,据我所知,无证

RAISERROR <error number> <error message>
Run Code Online (Sandbox Code Playgroud)

所述error number可大于13000的任何值; 表中不需要存在相应的条目sys.messages.该error message也可以是任意的.

以下示例代码

raiserror 13000 'test error'
Run Code Online (Sandbox Code Playgroud)

产生以下输出

Msg 13000, Level 16, State 1, Line 1
test error
Run Code Online (Sandbox Code Playgroud)

这种行为在SQL 2000,2005和2008中是相同的(我没有测试过2008 R2).

我们将尝试在支持的方法规范,但我的问题是在哪里这种行为从摆在首位来了.

我认为这必须一次被记录,支持的行为,但很难找到SQL 7及以前的在线书籍副本.有人知道什么时候支持它或什么时候被弃用,如果有的话?

编辑 为了澄清,根据文档,支持的RAISERROR语法是

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

并且sys.messages应该引发任何未定义的用户错误号,错误消息ID为50000

Ed *_*per 9

这看起来可能是SQL Server在Sybase中的起源的回归,其RAISERROR命令具有以下确切语法:

无论它的起源是什么,从SQL Server 2008 R2开始都不推荐使用此语法,并且将在SQL Server 2012中删除此语法(v 11. x).有关详细信息,请参阅SQL Server 2008 R2中不推荐使用的数据库引擎功能.