为什么RAISERROR拼写错误?或者不是吗?

Jas*_*ban 63 t-sql

为什么不RAISERROR拼写RAISEERROR?第二个E在哪里?我可以理解它是否是一些古老的关键字长度约束,但我不希望它是九个字符的限制.

RAIS或RROR是否是一个技术词汇,"加速错误"只是一个误读?它(直接)起源是否使用不同的语言?

我搜索过谷歌但没有找到关于这个主题的内容.

Sql*_*yan 13

有趣 - 我以前从未注意到这一点.

我怀疑这是一个早期的疏忽,但从来没有得到纠正,虽然我有点惊讶的是,以后没有为RAISEERROR添加支持,错误的拼写单独留给兼容性.

更新:显然,甚至有一些关于它应该是什么的内部混淆 - 检查这个连接请求,虽然MSFT没有回应它.

  • 有趣的是他们把它关闭为"不可重复".我刚刚点击了Connect页面上的"我可以重现这个"按钮. (3认同)
  • 有趣的是他们删除了它. (3认同)
  • 不幸的是,连接已被弃用,无法通过[wayback machine]找到该地址(https://web.archive.org/web/*/http://connect.microsoft.com/VisualStudio/feedback/details/112750/引发错误) (2认同)

小智 9

以下是Jens Suessmeyer的MSDN博客的答案:

"曾经问过自己为什么Raiserror中只有一个"e"?这是从旧的Sybase时代开始的,其中两个相同的角色被削减为仅一个:-)"

http://blogs.msdn.com/b/jenss/archive/2009/05/11/getting-feedback-progress-from-batches-and-stored-procedures.aspx

  • 如果是这样的话,那不应该是"RAISEROR"吗? (45认同)

dys*_*oko 9

我有同样的问题,这就是我偶然发现这篇文章的原因.从我所看到的实际上存在差异,并且拼写不是两种情况之间唯一不同的东西.由于使用原因,这两个功能不相同.

链接和颜色

  • RAISERROR - 具有MSDN链接,在SSMS中显示为青色/蓝色
  • RAISEERROR - 没有我现在能找到的MSDN链接,它在SSMS中是洋红色的

信用到期的信用 - 用户Sahuagin在上述问题的评论中已经提出了颜色观察.

您使用的是SQL Server 2012吗?
在继续之前,我认为如果您使用的是SQL Server 2012或更高版本,请不要使用RAISERRROR!你应该使用THROW.

那有什么区别?
您可以在单个内联语句中使用RAISERROR(蓝色),而不是使用RAISEERROR(magenta),它依赖于包含在不同代码块中的内容.基于返回的错误.确切的语法错误如下:

'RAISEERROR'附近的语法不正确.期待对话,对话,分发或交易.

RAISERROR示例(一个E - 蓝色)

DECLARE @foo varchar(200)
SET @foo = ''

IF NULLIF(@foo, '') IS NULL
BEGIN
    -- To fix this line, remove one "E" to read RAISERROR
    RAISEERROR('Not enough Vespene Gas!', 16, 1);

    RETURN -- This is required otherwise execution will continue!
END

-- You need the RETURN above or this will execute
SELECT Critical_TSqlLine = 1;
Run Code Online (Sandbox Code Playgroud)

这是我执行这段代码时会发生的事情.

现在,如果您只是从上面的代码中删除一个"E",那就可以了.我没有提供执行结果,但是如果你打开SSMS并将其放入并执行我保证它会起作用.

RAISEERROR示例(两个Es - magenta)
我花了太多时间试图弄清楚如何使用这个版本的函数,我不能提供一个实际可行的例子.我查看了使用CONVERSATION,DIALOG,DISTRIBUTED或TRANSACTION,我无法使用语法.长话短说,不要关心这个版本只使用单个E版本.对于那些使用SQL Server 2012的人来说,无论如何都不应该关注你.

  • 两个“E”版本实际上并不是什么。由于使用标识符文字语法而没有该名称的对象(例如表),您只是触发了编译错误...... (2认同)

KM.*_*KM. 5

为什么还有TIMESTAMP数据类型?支持旧版本.Sybase的人很久以前决定将其作为RAISERROR而不是RAISEERROR,当微软与Sybase达成协议时,他们继续这一趋势.


Joe*_*Joe 5

我相信这是故意的,因为它实际上更容易阅读 RAISERROR 与 RAISEERROR。(另请参见 sp_helprotect 的另一个示例),尤其是在没有区分大小写的情况下。

这些东西可以追溯到 Sybase 的历史。