答案 0 :(得分:10)
使用SQL Server 2005的新APPLY子句。 APPLY子句允许您将表连接到表值函数。那就让你写一个这样的查询:
SELECT C.CustomerID,
O.SalesOrderID,
O.TotalDue
FROM
AdventureWorks.Sales.Customer AS C
CROSS APPLY
AdventureWorks.dbo.fn_GetTopOrders(C.CustomerID, 3) AS O
ORDER BY
CustomerID ASC, TotalDue DESC
APPLY子句的作用类似于JOIN,而ON子句有两种形式:CROSS和OUTER。 OUTER APPLY子句返回左侧的所有行(Customers)是否返回表值函数中的任何行。如果没有返回任何行,则表值函数返回的列为null。如果表值函数返回行,则CROSS APPLY仅返回左侧的行(Customers)。
来源:Using CROSS APPLY in SQL Server 2005
编辑:正如Lieven所提到的,只有在需要将表中的值传递给UDF时才需要CROSS APPLY。
答案 1 :(得分:2)
修改强>
如果您不需要将参数传递给UDF,则只需将表与UDF连接即可。如果您需要传递参数,请使用另一个答案中提到的CROSS APPLY。
SELECT *
FROM dbo.YourTable yt
LEFT OUTER JOIN dbo.UDF_YourUDF() yd ON yd.YourTableID = yt.YourTableID