| 維度 | 預存程序 | 使用者定義函數 (UDF) |
|---|---|---|
| 回傳方式 | 多個 OUTPUT 參數、多個結果集、回傳值 | 單一純量值 或 資料表 (TVF) |
| 可用於 SELECT | 否 | 是 (純量用於選取清單/WHERE,TVF 用於 FROM) |
| 暫存表支援 | 支援 | 僅支援表變數,不可用暫存表 |
| 副作用限制 | 可修改資料庫狀態 | 嚴禁副作用 (不得修改表、發送郵件、修改目錄等) |
| 錯誤處理 | 錯誤可繼續執行後續邏輯 | 錯誤即終止函數並中止呼叫陳述式 |
| 執行計畫快取 | 同樣使用 Plan Cache | 同樣使用 Plan Cache |
GETDATE()、NEWID()、RAND() 等非確定性函數DEFAULT 關鍵字呼叫CREATE FUNCTION ... WITH SCHEMABINDING 將函數綁定至參考物件結構,防止參考物件被意外修改/刪除。需滿足:所有參考物件皆綁定結構、同一資料庫、雙部分命名、具 REFERENCES 權限。
-- 純量函數:至少兩部分名稱
SELECT dbo.MyScalarFunc() FROM MyTable;
-- 表值函數:單部分名稱即可
SELECT * FROM MyTableFunc();
-- 系統內建表值函數:需加 ::
SELECT * FROM ::fn_helpcollations();