我正在开发一个大型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
答案 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。
因此,您描述的行为是正确的 - 您正在引发用户定义的错误。