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

时间:2010-05-12 17:09:11

标签: tsql

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

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

我搜索了谷歌,但没有找到关于这个主题的内容。

5 个答案:

答案 0 :(得分:12)

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

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

更新:显然,甚至有一些关于它应该是什么的内部混淆 - 请查看this connect request,尽管MSFT没有回复它。

答案 1 :(得分:8)

以下是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

答案 2 :(得分:8)

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

链接和颜色

  • 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;

This is what happens when I execute this block of code.

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

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

答案 3 :(得分:5)

为什么还有TIMESTAMP数据类型?支持旧版本。 Sybase的人很久以前决定将其作为RAISERROR而不是RAISEERROR,当微软made a deal with Sybase他们继续这种趋势时。

答案 4 :(得分:3)

我认为这是故意的,因为它实际上更容易阅读RAISERROR与RAISEERROR。 (另见sp_helprotect的另一个例子),特别是当没有基于大小写的区别时。

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