2016-08-12 84 views
1

我見過很多的功能,每個功能我看到他們有括號()在其末端像一些功能,爲什麼括號()不用於像@@ IDENTITY

SELECT SCOPE_IDENTITY(); 

SELECT IDENT_CURRENT('TableName'); 

但是,爲什麼一些功能的不使用with parenthesis()像功能

SELECT @@IDENTITY; 

回答

2

@@ XXXXX是不帶參數的系統功能應被視爲只讀變量

+0

非常感謝..... –

+0

但沒有參數功能使用()sysmbol –

+0

是的,有很多帶括號但沒有參數的函數,比如sys.fn_cdc_get_max_lsn()。他們只是決定以不同的方式完成許多功能。 – Anton

2

我相信這些使用稱爲「服務器變量」,因此具有「類似變量」的語法而不是函數語法。之後它們被重新定義爲函數,但爲了向後兼容而保留較舊的語法。

不幸的是,我目前無法找到任何在線資源來備份此聲明,我認爲2000年版本的產品已經停用了「服務器變量」定義。


如果我們以@@ROWCOUNT爲例。在SQL Server 2000 BOL中,它描述爲:

返回受最後一條語句影響的行數。

...

變量設置...

(我強調)。

current documentation比較,它指的是它的值設置,但現在避免將其稱爲變量(或函數)。當然,它是現代的,增強的,不必支持具有正常函數語法的向後兼容性兄弟ROWCOUNT_BIG。並且被明確地稱爲功能。


我不認爲微軟已經使用@@變量語法引入的任何功能,因爲在2000年之前被釋放。

相關問題