代码之家  ›  专栏  ›  技术社区  ›  Ed Harper

这个未记录的raiserror语法是否有文档记录,随后被否决?

  •  10
  • Ed Harper  · 技术社区  · 14 年前

    我正在研究一个大型的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 ] ]
    

    以及未在中定义的任何用户错误号 系统消息 应引发错误消息ID 50000

    2 回复  |  直到 9 年前
        1
  •  8
  •   Ed Harper    9 年前

    看起来像这样 可以 重新回到SQL Server在Sybase的起源 RAISERROR 命令的语法如下:

    无论其起源是什么,自SQL Server 2008 R2起,此语法将被弃用,并将在SQL Server 2012(v 11)中删除。 X )见 Deprecated Database Engine Features in SQL Server 2008 R2 详细信息请参见第页。

        2
  •  0
  •   codingbadger    14 年前

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

    所以您描述的行为是正确的——您引发了一个用户定义的错误。