Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使左外联接成为具有任何sql表的UD函数?_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

如何使左外联接成为具有任何sql表的UD函数?

如何使左外联接成为具有任何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子句让我

我有一张桌子。我有一个用户定义的函数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  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。如果需要从表中传递参数,则需要交叉应用。