内联用户定义函数是返回
table 数据类型的用户定义函数的子集。内联函数可用于获得参数化视图的功能。
以下示例将返回指定区域的商店名称和城市:
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 子句只包含关键字 table。不必定义返回变量的格式,因为它由 RETURN 子句中的 SELECT 语句的结果集的格式设置。
- function_body 不用 BEGIN 和 END 分隔。
- RETURN 子句在括号中包含单个 SELECT 语句。SELECT 语句的结果集构成函数所返回的表。内联函数中使用的 SELECT 语句与视图中使用的 SELECT 语句受到相同的限制。
本文转自 august 51CTO博客,原文链接:http://blog.51cto.com/august/6933,如需转载请自行联系原作者