为什么不RAISERROR
拼写RAISEERROR
?第二个E在哪里?我可以理解它是否是一些古老的关键字长度约束,但我不希望它是九个字符的限制.
RAIS或RROR是否是一个技术词汇,"加速错误"只是一个误读?它(直接)起源是否使用不同的语言?
我搜索过谷歌但没有找到关于这个主题的内容.
Sql*_*yan 13
有趣 - 我以前从未注意到这一点.
我怀疑这是一个早期的疏忽,但从来没有得到纠正,虽然我有点惊讶的是,以后没有为RAISEERROR添加支持,错误的拼写单独留给兼容性.
更新:显然,甚至有一些关于它应该是什么的内部混淆 - 检查这个连接请求,虽然MSFT没有回应它.
小智 9
以下是Jens Suessmeyer的MSDN博客的答案:
"曾经问过自己为什么Raiserror中只有一个"e"?这是从旧的Sybase时代开始的,其中两个相同的角色被削减为仅一个:-)"
我有同样的问题,这就是我偶然发现这篇文章的原因.从我所看到的实际上存在差异,并且拼写不是两种情况之间唯一不同的东西.由于使用原因,这两个功能不相同.
链接和颜色
信用到期的信用 - 用户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的人来说,无论如何都不应该关注你.
我相信这是故意的,因为它实际上更容易阅读 RAISERROR 与 RAISEERROR。(另请参见 sp_helprotect 的另一个示例),尤其是在没有区分大小写的情况下。
这些东西可以追溯到 Sybase 的历史。