联合两个或多个表,当您不知道要合并的表的数量时

时间:2009-03-31 13:29:18

标签: sql sql-server sql-server-2005 user-defined-functions

我正在使用MS SQL 2005。 我已将树结构定义为:

1 
|\ 
2 3 
  /|\ 
 4 5 6 

我已经创建了一个SQL函数Subs(id),它获取了id,并返回了子树表。 因此,Subs(3)将返回4行3,4,5,6,而Subs(2)将返回一行,为2。

我有一个select语句,它返回上面的ID(用其他表连接这个树)

我想要在返回上述Ids的select语句之后 (这将产生一个表格,例如2行:)

2
3

能够将子功能作为

运行
Subs(2) 
union 
Subs(3).

(结果应该是id为2,3,4,5,6的行)

问题是我不知道如何传递参数,我不知道如何动态使用union。

是否可以在此级别解决此问题,还是应该将其提升到较高级别(C#)?

2 个答案:

答案 0 :(得分:1)

我认为你不需要UNION,使用SQL Server 2005你可以使用CROSS APPLY实现所需的结果:

select 
    f.* 
from 
    resultsTable rt
    cross apply dbo.subs(rt.ID) f

假设resultTable是存储第一个查询结果的结果,而字段的名称是ID

答案 1 :(得分:-1)

我想你想阅读Recursive Common Table Expressions