如何使左外联接成为具有任何sql表的UD函数?
我有一张桌子。我有一个用户定义的函数UDF。我的UDF返回一个表。我需要左外连接我的表和我的UDF表 编辑 如果不需要向UDF传递参数,只需将表与UDF联接即可。如果需要传递参数,请使用另一个答案中提到的交叉应用如何使左外联接成为具有任何sql表的UD函数?,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我有一张桌子。我有一个用户定义的函数UDF。我的UDF返回一个表。我需要左外连接我的表和我的UDF表 编辑 如果不需要向UDF传递参数,只需将表与UDF联接即可。如果需要传递参数,请使用另一个答案中提到的交叉应用 SELECT * FROM dbo.YourTable yt LEFT OUTER JOIN dbo.UDF_YourUDF() yd ON yd.YourTableID = yt.YourTableID 使用SQLServer2005的新APPLY子句。APPLY子句让我
SELECT *
FROM dbo.YourTable yt
LEFT OUTER JOIN dbo.UDF_YourUDF() yd ON yd.YourTableID = yt.YourTableID
使用SQLServer2005的新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子句的作用类似于没有ON子句的JOIN,它有两种类型:CROSS和OUTER。outerapply子句返回左侧的所有行,无论它们是否返回表值函数中的任何行。如果没有返回行,则表值函数返回的列为null。如果表值函数返回行,则交叉应用仅返回左侧客户的行
资料来源:
编辑:如列文所述,交叉应用仅在您需要将表中的值传递给UDF时才有必要。交叉应用仅在您需要将表CustomerID中的值传递给UDF时才有必要。没有参数的自定义项可以像其他表一样联接。你说得对。我编辑了我的答案以反映这一点。非常感谢。错误:Msg 209,16级,状态1,第5行不明确的列名“日期”。Msg 209,第16级,状态1,第6行不明确的列名“Date”。选择CountPage作为VisitingCount,[时间]从选择页面,日期,[用户],dbo.fn_GetActivityLogArranger2Date,选择scr_SecurityLog sl left outer加入dbo.DefaultActivity2 da上的[Date]=sl.[Date]scr_SecuristLog,其中日期介于“2009-05-02”和“2009-05-03”之间,按[时间]分组,按[时间]排序,但此查询给我错误:Msg 209,16级,状态1,第5行不明确的列名“日期”。Msg 209,16级,状态1,第6行,不明确的列名“日期”。@Moheb,我知道。在你写评论并否决这个回答之前7分钟,我在另一个回答中添加了这个要求作为评论。@ykaratoprak。如果需要从表中传递参数,则需要交叉应用。