2010-03-05 63 views

回答

3

我假設你是指模式名稱?所有者是創建它的用戶。

它區分功能和內置功能。 「系統」存儲過程和函數存在於主數據庫中(因此可以進行搜索),而內置函數(例如DATEADD)駐留在數據庫引擎中。

當你爲數據庫引擎指定SELECT MyFunction()來確定你是指一個駐留在數據庫中的函數還是一個內置函數時,我想這會更困難。

+0

謝謝安迪! 是的,我的意思是模式名稱。那麼,你說的是什麼幫助,但我並不完全同意你的看法。爲什麼我們不需要區分用戶的存儲過程與內置存儲過程? – 2010-03-07 05:40:48

+0

由於存儲過程只存在於數據庫中,因此它們不會內置,因此引擎可以同時搜索主數據庫和當前數據庫。這就是爲什麼你應該儘量不要命名你的過程sp_something。如果SQL在您的過程開始時看到sp_,它將首先搜索master數據庫。 – 2010-03-07 09:04:21

+0

謝謝安迪。我現在明白了。正如伊恩在下面所說的,我們只需要標量函數的模式。對於表值函數,我們不需要一個。我想聽聽你對安迪的想法。請與我討論。 – 2010-03-07 10:27:32

2

這實際上只是標量值函數的情況。

+0

是的,你是對的伊恩。我剛剛測試並確認你說的話!那麼從這個角度來說,我們可以說「沒有系統表值函數」嗎? – 2010-03-07 05:54:37

0

在與上面的Andy討論之後,我在這裏回答我自己的問題: 創建時,存儲過程存儲在連接的當前數據庫中。與此同時,函數存儲在兩個位置:數據庫引擎(標量值內置函數)和連接的當前數據庫(用戶定義的數據庫)。 因此,在調用用戶定義的標量值函數時,我們需要模式名稱前綴來區分它們與內置函數。對於其他類型的函數和存儲過程,我們不需要此前綴。

相關問題