为什么括号()不用于@@IDENTITY等函数



我见过很多函数,在每个函数的末尾都有括号(),比如,

SELECT SCOPE_IDENTITY();
SELECT IDENT_CURRENT('TableName');

但是为什么有些函数不像函数

那样使用with parenthesis() ?
SELECT @@IDENTITY;

@@xxxxx为不带参数的系统函数,应作为只读变量处理

我认为这些使用的被称为"服务器变量";还有一个类似变量的词;语法而不是函数语法。它们后来被重新定义为函数,但为了向后兼容,保持了旧的语法。

不幸的是,我目前找不到任何在线资源来支持这一说法,我认为"服务器变量"。定义在2000年发布的产品中已经被淘汰了。


@@ROWCOUNT为例。在SQL Server 2000 BOL中,它被描述为:

返回受最后一条语句影响的行数。

这个变量被设置为…

强调我<<p> (em> )。

将其与当前文档进行比较,当前文档提到它具有其值集,但现在避免将其作为变量(或函数)引用。当然,它是现代的,增强的,不需要支持向后兼容的兄弟ROWCOUNT_BIG,它具有正常的函数语法。并且被显式地称为函数。


我不相信微软在2000年之前已经使用@@变量语法引入了任何新的函数。

最新更新