爲什麼在調用存儲過程時調用用戶定義的函數時不需要所有者名稱? 請幫忙!爲什麼在調用存儲過程時調用用戶定義的函數時需要所有者名稱?
1
A
回答
3
我假設你是指模式名稱?所有者是創建它的用戶。
它區分功能和內置功能。 「系統」存儲過程和函數存在於主數據庫中(因此可以進行搜索),而內置函數(例如DATEADD
)駐留在數據庫引擎中。
當你爲數據庫引擎指定SELECT MyFunction()
來確定你是指一個駐留在數據庫中的函數還是一個內置函數時,我想這會更困難。
2
這實際上只是標量值函數的情況。
+0
是的,你是對的伊恩。我剛剛測試並確認你說的話!那麼從這個角度來說,我們可以說「沒有系統表值函數」嗎? – 2010-03-07 05:54:37
0
在與上面的Andy討論之後,我在這裏回答我自己的問題: 創建時,存儲過程存儲在連接的當前數據庫中。與此同時,函數存儲在兩個位置:數據庫引擎(標量值內置函數)和連接的當前數據庫(用戶定義的數據庫)。 因此,在調用用戶定義的標量值函數時,我們需要模式名稱前綴來區分它們與內置函數。對於其他類型的函數和存儲過程,我們不需要此前綴。
相關問題
- 1. JavaScript即時函數調用 - 爲什麼函數需要括號?
- 2. 在函數調用存儲過程中找不到用戶定義的函數
- 3. 爲什麼在調用我的javascript函數時需要'javascript:'?
- 4. Get調用存儲過程的名稱
- 5. 在另一個用戶定義的函數中調用用戶定義的函數時發生名稱錯誤
- 6. 使用轉義數據庫名稱調用MySQL存儲過程
- 7. 如何在調用sql存儲過程時獲取列名稱
- 8. 爲什麼從C#調用存儲過程時出現錯誤?
- 9. 創建存儲過程時需要「定義者」嗎?
- 10. 爲什麼我在定義原型時無法調用函數?
- 11. 調用MPI_Comm_spawn時,所有進程是否需要所有數據?
- 12. 如何調用從用戶定義函數存儲過程在SQL Server 2000
- 13. 爲什麼函數調用稱爲「函數調用」?
- 14. 爲什麼程序在調用函數時跳過輸入?
- 15. 在存儲過程中調用「函數」
- 16. 在需要時調用函數
- 17. 使用PDO調用具有相同名稱的存儲過程
- 18. 爲什麼當存儲過程可以完成SQL函數的所有功能時,我們需要SQL函數?
- 19. 在調用存儲過程中的函數時發生錯誤
- 20. ASP.NET在調用存儲過程時稱FUNCTION不存在
- 21. 找到的所有存儲過程調用一個函數
- 22. 在側存儲過程中調用用戶定義函數的方法是什麼?
- 23. 使用dispatcher.BeginInvoke時,何時/爲什麼需要調用Dispatcher.Run?
- 24. 當調用用戶沒有ALTER TABLE時,從存儲過程調用UPDATE STATISTICS
- 25. 從select語句調用用戶定義的存儲過程mysql
- 26. 在vba中調用(用戶自定義)函數稱爲LINTERP
- 27. 爲什麼有時候viewDidLoad首先被調用,有時候被稱爲後者?
- 28. 調用函數時使用$或`(tilt)與通常調用函數的名稱有什麼區別
- 29. 我什麼時候需要調用XInitThreads?
- 30. 在存儲過程中查找調用者用戶
謝謝安迪! 是的,我的意思是模式名稱。那麼,你說的是什麼幫助,但我並不完全同意你的看法。爲什麼我們不需要區分用戶的存儲過程與內置存儲過程? – 2010-03-07 05:40:48
由於存儲過程只存在於數據庫中,因此它們不會內置,因此引擎可以同時搜索主數據庫和當前數據庫。這就是爲什麼你應該儘量不要命名你的過程sp_something。如果SQL在您的過程開始時看到sp_,它將首先搜索master數據庫。 – 2010-03-07 09:04:21
謝謝安迪。我現在明白了。正如伊恩在下面所說的,我們只需要標量函數的模式。對於表值函數,我們不需要一個。我想聽聽你對安迪的想法。請與我討論。 – 2010-03-07 10:27:32