我见过很多函数,在每个函数的末尾都有括号()
,比如,
SELECT SCOPE_IDENTITY();
SELECT IDENT_CURRENT('TableName');
但是为什么有些函数不像函数
那样使用with parenthesis()
?SELECT @@IDENTITY;
@@xxxxx为不带参数的系统函数,应作为只读变量处理
我认为这些使用的被称为"服务器变量";还有一个类似变量的词;语法而不是函数语法。它们后来被重新定义为函数,但为了向后兼容,保持了旧的语法。
不幸的是,我目前找不到任何在线资源来支持这一说法,我认为"服务器变量"。定义在2000年发布的产品中已经被淘汰了。
以@@ROWCOUNT
为例。在SQL Server 2000 BOL中,它被描述为:
强调我<<p> (em> )。返回受最后一条语句影响的行数。
…
这个变量被设置为…
将其与当前文档进行比较,当前文档提到它具有其值集,但现在避免将其作为变量(或函数)引用。当然,它是现代的,增强的,不需要支持向后兼容的兄弟ROWCOUNT_BIG
,它具有正常的函数语法。并且被显式地称为函数。
我不相信微软在2000年之前已经使用@@
变量语法引入了任何新的函数。