SQL-将表传递给Select中的UDF

SQL-将表传递给Select中的UDF,sql,sql-server,sql-server-2008,parameters,user-defined-functions,Sql,Sql Server,Sql Server 2008,Parameters,User Defined Functions,我有一个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 SELECT

我有一个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
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
我想对该表中具有最新日期的每一行调用我的UDF,并向UDF传递一个表,其中包含每个不同单位和行的列date和Revenue。我还想调用UDF并传递每个不同单元和行的日期和订单。这是一个报告,UDF将始终通过Date列和另一列,我希望对其应用一些计算、存储和报告。所以我已经研究了很多东西,包括交叉应用,我想做一些类似的事情:

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
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时,只能在select列表中指定一个表达式。”我查看了交叉应用,但这似乎只适用于返回表变量时。因此,我可能可以通过使用游标和循环来回答我自己的问题,并在每次循环迭代中构造我想要传递给UDF的每个表,但这似乎并不正确。有人能告诉我如何在SQL Server 2008中实现我想要的功能吗?

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

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

但是,考虑到子查询与所选行没有任何关系,您可以这样做

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 

我很害怕。是否有一种方法可以轻松地按不同的单位和行将表拆分为子表?或者我只需要为我想要通过UDF的每个单位/行和列创建一个表?@deusxmach1na-您是否试图将每一行视为一个表?不是每一行,而是具有相同单位和行的所有行都应该是一个表。我的UDF将采用日期列和收入列,并对其进行计算,我希望它对每个不同的单位和行值执行该计算。因此,在我的示例表中,我希望前两行作为一个表,因为它们是单位D和线R,下两行作为另一个表,因为它们是单位H和线W。我现在得到了一个有效的解决方案,谢谢!我使用ROW_NUMBER()OVER(按单元划分,按日期描述的行顺序)在我想要开始一个新表的每一行中放置一个1,并遍历该列来构建我的表。不管怎样,你回答了我原来的问题,谢谢!一个简短的提示
DECLARE@t1 TABLE
应该是
DECLARE@t1 as dbo.MyTableType
,因为我的UDF希望获得我的特定TableType作为参数。