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

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

RAIS还是RROR是一个技术词汇,“raise-error”只是一个误读? 它的(直接)源于不同的语言?

我search了谷歌,但没有find太多关于这个问题。

有趣的 – 我真的从来没有注意到,之前。

我怀疑这是一个早期的疏忽,但从来没有纠正过,尽pipe我有点惊讶,后来RAISEERROR没有增加支持,单独为兼容而留下了错误的拼写。

更新:显然,甚至有一些内部的疑惑应该是什么 – 检查出这个连接请求 ,虽然MSFT没有回应。

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

“曾经问过自己为什么Raiserror中只有一个”e“,那就是从旧的Sybase时代,两个相同的angular色只被削减到一个:-)”

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

为什么仍然有一个TIMESTAMP数据types? 支持旧版本。 一个Sybase人很久以前就决定把它变成RAISERROR而不是RAISEERROR,当时微软和Sybase达成了一个交易,他们继续这个趋势。

我相信这是故意的,它实际上更容易阅读RAISERROR和RAISEERROR。 (另请参阅sp_helprotect),尤其是在没有基于大小写的区分的情况下。

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

我有同样的问题,这就是为什么我偶然发现这个职位。 从我所看到的实际上有一个区别,拼写不是两个案件的唯一不同。 由于使用这两个函数是不相同的。

链接和颜色

  • RAISERROR – 有一个MSDN链接,它在SSMS中用青色/蓝色着色
  • RAISEERROR – 没有我现在可以find的MSDN链接,它是SSMS中的彩色洋红色

信贷到期的信用 – 在上述问题的评论中,用户Sahuagin已经提出了色彩观察。

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

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

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

这是执行这个代码块时发生的事情。

现在,如果你只是从上面的代码中删除一个“E”,这将工作得很好。 我没有提供执行结果,但是如果你打开SSMS并放入并执行,我保证它能正常工作。

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