天天看點

SQL 使用者定義函數

程式設計語言中的函數是用于封裝經常執行的邏輯的子例程。任何代碼若必須執行函數所包含的邏輯,都可以調用該函數,而不必重複所有的函數邏輯。

microsoft® sql server™ 2000 支援兩種函數類型:

内置函數

按 transact-sql 參考中定義的方式運作且不能修改。隻有使用 transact-sql 參考中所定義文法的 transact-sql 語句才能引用這類函數。有關這些内置函數的更多資訊,請參見使用函數。

使用者定義函數

使您得以用 create function 語句定義自己的 transact-sql 函數。有關這些内置函數的更多資訊,請參見使用者定義函數。

使用者定義函數接受零個或更多的輸入參數,并傳回單值。一些使用者定義函數傳回單個的标量資料值,如 int、char 或 decimal 值。

例如,下面的語句建立一個傳回 decimal 的簡單函數:

然後可以在允許整型表達式的任何地方(如表的計算列中)使用該函數:

sql server 2000 還支援傳回 table 資料類型的使用者定義函數:

該函數可聲明内部 table 變量,将行插入該變量,然後将該變量作為傳回值傳回。

一類稱為内嵌函數的使用者定義函數,将 select 語句的結果集作為變量類型 table 傳回。

這些函數可用在能指定表表達式的地方。有關 table 資料類型的更多資訊,請參見使用特殊資料。

傳回 table 的使用者定義函數可以是替代視圖的強大方式。傳回 table 的使用者定義函數可用在 transact-sql 查詢中允許表或視圖表達式的地方。視圖受限于單個 select 語句,而使用者定義函數可包含附加的語句,使函數所包含的邏輯比視圖可能具有的邏輯更強大。

傳回 table 的使用者定義函數還可替換傳回單個結果集的存儲過程。由使用者定義函數傳回的 table 可在 transact-sql 語句的 from 子句中引用,而傳回結果集的存儲過程則不能。例如,fn_employeesindept 是傳回 table 的使用者定義函數,可由 select 語句喚醒調用:

下面的語句在 northwind 資料庫中建立将要傳回 table 的函數:

在這個函數中,傳回的本地變量名是 @ordershippertab。函數中的語句在 @ordershippertab 變量中插入行,以生成由該函數傳回的 table 結果。外部語句喚醒調用該函數以引用由該函數傳回的 table:

©1988-2000 microsoft corporation。保留所有權利。