我有一个 UDF,它接受一个表作为参数(一个 2 列的表)并输出一个字符串,就像这篇文章一样。我有一个表,我想将 UDF 应用于多个列,如下所示:
Date Unit Line Revenue Orders
4/1/12 D R 20.00 3
4/2/12 D R 25.00 4
4/1/12 H W 33.00 1
4/2/12 H W 35.00 3
我想在该表中具有最新日期的每一行上调用我的 UDF,并向 UDF 传递一个表,其中包含每个不同单位和行的日期和收入列。而且我还想调用 UDF 并为每个不同的单元和行传递日期和订单。这是一份报告,UDF 将始终通过 Date 列和我想对其应用一些计算并存储和报告的另一列。所以我看了很多东西,包括 CROSS APPLY,我想做这样的事情:
SELECT T.unit
, T.line
, dbo.fn_myUDF((SELECT T2.Date, T2.Revenue FROM #Table T2)) as UDFRevenueResult
, dbo.fn_myUDF((SELECT T2.Date, T2.Orders FROM #Table T2)) as UDFOrderResult
FROM #Table T
WHERE T.Date = @ReportDate
这给了我错误“当 EXISTS 未引入子查询时,选择列表中只能指定一个表达式。” 我查看了 CROSS APPLY 但这似乎只适用于您返回表变量时。因此,我可能可以通过使用游标和循环来回答我自己的问题,并在每次循环迭代中构造我想传递给 UDF 的每个表,但这似乎并不正确。谁能告诉我如何在 SQL Server 2008 中做我想做的事?