如何使左外连接与任何sql表的UD函数?

时间:2009-05-11 06:57:34

标签: sql sql-server sql-server-2005

我有一张桌子。我有一个用户定义的函数(UDF)。我的UDF给我一张桌子。我需要左外连接我的表和我的UDF表。

2 个答案:

答案 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