天天看點

内聯使用者定義函數

内聯使用者定義函數

内聯使用者定義函數是傳回 <b>table</b> 資料類型的使用者定義函數的子集。内聯函數可用于獲得參數化視圖的功能。

以下示例将傳回指定區域的商店名稱和城市:

USE AdventureWorks; GO SELECT DISTINCT S.Name AS Store, A.City FROM Sales.Store AS S JOIN Sales.CustomerAddress AS CA ON CA.CustomerID = S.CustomerID JOIN Person.Address AS A ON A.AddressID = CA.AddressID JOIN Person.StateProvince SP ON SP.StateProvinceID = A.StateProvinceID WHERE SP.Name = N'Washington';

如果此視圖更通用,并且允許使用者在檢視時指定所感興趣的區域,那麼則會更好。然而,視圖不支援在 WHERE 子句中指定的搜尋條件的參數。内聯使用者定義函數可用于支援在 WHERE 子句中指定的搜尋條件的參數。以下示例将建立一個允許使用者在查詢中指定區域的内聯函數:

USE AdventureWorks; GO CREATE FUNCTION Sales.ufn_CustomerNamesInRegion ( @Region nvarchar(50) ) RETURNS table AS RETURN ( SELECT DISTINCT S.Name AS Store, A.City FROM Sales.Store AS S JOIN Sales.CustomerAddress AS CA ON CA.CustomerID = S.CustomerID JOIN Person.Address AS A ON A.AddressID = CA.AddressID JOIN Person.StateProvince SP ON SP.StateProvinceID = A.StateProvinceID WHERE SP.Name = @Region ) GO -- Example of calling the function for a specific region SELECT * FROM Sales.ufn_CustomerNamesInRegion(N'Washington') GO

内聯使用者定義函數遵從以下規則:

RETURNS 子句隻包含關鍵字 <b>table</b>。不必定義傳回變量的格式,因為它由 RETURN 子句中的 SELECT 語句的結果集的格式設定。

function_body 不用 BEGIN 和 END 分隔。

RETURN 子句在括号中包含單個 SELECT 語句。SELECT 語句的結果集構成函數所傳回的表。内聯函數中使用的 SELECT 語句與視圖中使用的 SELECT 語句受到相同的限制。

表值函數隻接受常量或 <b>@local_variable</b> 參數

繼續閱讀