为什么括号()不用于某些函数,如@@ IDENTITY

时间:2016-08-12 04:39:29

标签: sql sql-server database

我见过很多函数,在每个函数上我看到它们的末尾都有括号(),如

SELECT SCOPE_IDENTITY();

SELECT IDENT_CURRENT('TableName');

但为什么某些功能不使用with parenthesis()功能

SELECT @@IDENTITY;

2 个答案:

答案 0 :(得分:2)

@@ xxxxx是没有参数的系统函数,应将其视为只读变量

答案 1 :(得分:2)

我相信这些使用被称为“服务器变量”,因此具有“类似于变量”的语法而不是函数语法。从那以后,它们被重新定义为函数,但为了向后兼容性而保留了较旧的语法。

不幸的是,我目前无法找到任何在线资源来支持这一说法,我认为“服务器变量”定义已经在2000版本的产品中退役。

如果我们以@@ROWCOUNT为例。在SQL Server 2000 BOL中,它被描述为:

  

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

     

...

     

变量已设置...

(我强调)。

将其与current documentation进行比较,ROWCOUNT_BIG指的是它的值已设置但现在避免将其称为变量(或函数)。当然,它是现代的,增强的,不必支持具有正常功能语法的向后兼容性兄弟http://michiel.vanbaak.eu/2016/02/27/sending-big-email-using-google-php-api-client-and-gmail/。并明确称为函数。

我不相信Microsoft自2000年之前就使用@@变量语法引入了任何 new 函数。