SQL - 将表传递给 Select 中的 UDF

标签 sql sql-server sql-server-2008 parameters user-defined-functions

我有一个 UDF,它接受一个表作为参数(一个 2 列表)并输出一个字符串,就像这样 article 。我有一个表,我想将 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 将始终传递日期列和我想要应用一些计算并存储和报告的另一列。所以我看了很多东西,包括交叉应用,我想做这样的事情:

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 中执行我想要的操作吗?

最佳答案

不能像这样使用子查询来返回查询的 SELECT 部分中的表变量。它们只能返回单个值。如:

set @myParam = (select myvalue from table where primarykey = 1)

set @myParam = (select top 1 myvalue from table)

但是,考虑到您的子查询与所选行没有任何关系,您可以执行类似的操作。

declare @t1 table (DateTime c1, float c2)
insert @t1
SELECT Date, Revenue 
FROM #Table 

declare @t2 table (DateTime c1, int c2) -- not sure on data type of 'Orders'
insert @t2
SELECT Date, Orders FROM #Table


SELECT T.unit               
     , T.line               
     , dbo.fn_myUDF(@t1) as UDFRevenueResult               
     , dbo.fn_myUDF(@t2) as UDFOrderResult 
FROM #Table T 
WHERE T.Date = @ReportDate 

关于SQL - 将表传递给 Select 中的 UDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10417148/

相关文章:

sql-server - SQL Server - 创建只能从数据库读取和写入数据的用户

sql-server-2008 - 在 SQL Server 2008 中将字符串拆分为固定长度的部分

c# - 林克 : Sort by Date when its stored as text

sql - 如何使用 group by 函数只取最后两行 postgres

sql-server - 错误: Unsupported PIVOT column type: text

sql-server - 根据两列动态旋转

sql - 多次加入表

php - 如果行不存在则先更新然后插入(SQL)而不是先检查行是否存在?

php - 关于一个sql查询

sql - 选择具有满足某些约束的多个子关系的所有行