为什么RAISERROR拼写错误? 或者不是?
RAISERROR
为什么不拼写RAISEERROR
? 第二个E在哪里? 我可以理解,如果这是一个古老的关键字长度限制,但我不希望它是一个九个字符的限制。
RAIS还是RROR是一个技术词汇,“raise-error”只是一个误读? 它的(直接)源于不同的语言?
我search了谷歌,但没有find太多关于这个问题。
有趣的 – 我真的从来没有注意到,之前。
我怀疑这是一个早期的疏忽,但从来没有纠正过,尽pipe我有点惊讶,后来RAISEERROR没有增加支持,单独为兼容而留下了错误的拼写。
更新:显然,甚至有一些内部的疑惑应该是什么 – 检查出这个连接请求 ,虽然MSFT没有回应。
以下是Jens Suessmeyer的MSDN博客的答案:
“曾经问过自己为什么Raiserror中只有一个”e“,那就是从旧的Sybase时代,两个相同的angular色只被削减到一个:-)”
为什么仍然有一个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的用户,这不应该成为你的问题。