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

时间:2010-09-20 09:04:30

标签: sql-server error-handling

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

在整个代码库中,引发错误的方法是使用以下语法,据我所知,无证件

RAISERROR <error number> <error message>

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

以下示例代码

raiserror 13000 'test error'

产生以下输出

Msg 13000, Level 16, State 1, Line 1
test error

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

我们将尝试标准化支持的方法,但我的问题是这种行为首先来自何处。

我认为这必须经过记录,支持的行为,但很难找到SQL 7及以前的在线图书副本。有人知道何时支持它或何时被弃用?如果有的话?

修改 为了澄清,根据documentation,支持的RAISERROR语法是

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

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

2 个答案:

答案 0 :(得分:8)

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

无论其来源如何,此语法自SQL Server 2008 R2起已弃用,并将在SQL Server 2012中删除(第11版 x )。有关详细信息,请参阅Deprecated Database Engine Features in SQL Server 2008 R2页面。

答案 1 :(得分:0)

用户定义的错误消息实际上是 13000到2147483647。

因此,您描述的行为是正确的 - 您正在引发用户定义的错误。