1

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

1 
|\ 
2 3 
  /|\ 
 4 5 6 

我制作了一个 SQL 函数 Subs(id),它获取 id 并返回子树表。因此,Subs(3) 将返回 4 行 3、4、5、6,而 Subs(2) 将返回 1 行 2。

我有一个返回上述 ID 的选择语句(将此树与其他表连接)

我想要在返回上述 ID 的 select 语句之后
(这将导致一个包含例如 2 行的表:)

2
3

能够运行 Subs 功能

Subs(2) 
union 
Subs(3).

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

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

是否有可能在这个级别解决这个问题,或者我应该把它带到上层(C#)?

4

2 回答 2

1

我认为您在这里不需要 UNION,使用 SQL Server 2005,您可以使用 CROSS APPLY 获得所需的结果:

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

那是假设 resultTable 是存储您的第一个查询结果的那个,并且该字段的名称是 ID

于 2009-03-31T13:36:47.787 回答
-1

我认为您想阅读Recursive Common Table Expressions

于 2009-03-31T13:33:30.027 回答