为什么不RAISERROR
拼写RAISEERROR
?第二个E在哪里?我可以理解它是否是一些古老的关键字长度约束,但我不希望它是九个字符的限制。
RAIS或RROR是否是一个技术词汇,“加速错误”只是一个误读?它(直接)起源是否使用不同的语言?
我搜索了谷歌,但没有找到关于这个主题的内容。
答案 0 :(得分:12)
有趣 - 我以前从未注意到这一点。
我怀疑这是一个早期的疏忽,但从来没有得到纠正,虽然我有点惊讶的是RAISEERROR后来没有添加支持,因为兼容性错误而单独留下。
更新:显然,甚至有一些关于它应该是什么的内部混淆 - 请查看this connect request,尽管MSFT没有回复它。
答案 1 :(得分:8)
以下是Jens Suessmeyer的MSDN博客的回答:
“曾经问过自己为什么Raiserror中只有一个”e“?这是从旧的Sybase时代开始的,其中两个相同的字符只被削减为一个:-)”
答案 2 :(得分:8)
我有同样的问题,这就是我偶然发现这篇文章的原因。从我所看到的实际上存在差异,并且拼写不是两种情况之间唯一不同的东西。由于使用原因,这两个功能不相同。
链接和颜色
信用到期的信用 - 用户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;
现在如果您只是从上面的代码中删除一个“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的历史。