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

Sql 为什么括号()不用于某些函数,如@@IDENTITY,sql,sql-server,database,Sql,Sql Server,Database,我见过很多函数,在每个函数的末尾都有括号 SELECT SCOPE_IDENTITY(); SELECT IDENT_CURRENT('TableName'); 但是为什么有些函数不使用带括号的(类似函数 SELECT @@IDENTITY; @@xxxxx是没有参数的系统函数,应将其视为只读变量@@xxxxx是没有参数的系统函数,应将其视为只读变量我相信这些函数过去被称为“服务器变量”,因此具有“类似变量”的语法,而不是函数语法。此后,它们被重新定义为函数,但为了向后兼容,保留了较旧的语

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

SELECT SCOPE_IDENTITY();

SELECT IDENT_CURRENT('TableName');
但是为什么有些函数不使用带括号的
类似函数

SELECT @@IDENTITY;

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

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

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

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


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

返回受上一条语句影响的行数

此变量已设置为

(我的重点)

将其与进行比较,后者表示它已设置了其值,但现在避免将其称为变量(或函数)。当然,它是现代的、增强的,不必支持具有正常函数语法的向后兼容性同级。并显式地称为函数


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

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

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


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

返回受上一条语句影响的行数

此变量已设置为

(我的重点)

将其与进行比较,后者表示它已设置了其值,但现在避免将其称为变量(或函数)。当然,它是现代的、增强的,不必支持具有正常函数语法的向后兼容性同级。并显式地称为函数



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

但是没有参数的函数使用()sysmbolyes,有很多带括号和没有参数的函数,比如sys.fn\u cdc\u get\u max\u lsn()。他们只是决定用不同的方法来实现许多函数。但是没有参数的函数使用()sysmbolyes,有许多带括号和没有参数的函数,比如sys.fn\u cdc\u get\u max\u lsn()。他们只是决定对许多功能采用不同的方式。