Tsql 对多个选择执行递归t-sql的最简单方法

Tsql 对多个选择执行递归t-sql的最简单方法,tsql,Tsql,我正在开发一个物料清单成本计算器程序,我正在努力寻找一个简单的解决方案来解决一些我想要的递归选择 我正在使用SQLServer2005作为应用程序的这一部分 假设我有产品A,其中包含组件B和零件C。组件B将包含零件D和E,但是,这里是我要讨论的地方,D和或E可能包含X个其他组件 我可以做一些类似的事情 SELECT * FROM TBLBOM WHERE Parent = A UNION SELECT * FROM TBLBOM WHERE Parent = B UNION SELECT

我正在开发一个物料清单成本计算器程序,我正在努力寻找一个简单的解决方案来解决一些我想要的递归选择

我正在使用SQLServer2005作为应用程序的这一部分

假设我有产品A,其中包含组件B和零件C。组件B将包含零件D和E,但是,这里是我要讨论的地方,D和或E可能包含X个其他组件

我可以做一些类似的事情

SELECT * FROM TBLBOM WHERE Parent = A 
UNION 
SELECT * FROM TBLBOM WHERE Parent = B 
UNION 
SELECT * FROM TBLBOM WHERE Parent = C 
PARENT    COMP    COST
A          X       £1
B          D       £0.5
B          E       £0.5
....
C          Y       £1
按照生产线生产某物

SELECT * FROM TBLBOM WHERE Parent = A 
UNION 
SELECT * FROM TBLBOM WHERE Parent = B 
UNION 
SELECT * FROM TBLBOM WHERE Parent = C 
PARENT    COMP    COST
A          X       £1
B          D       £0.5
B          E       £0.5
....
C          Y       £1
但假设组件D由组件F&G组成,我如何在t-sql语句中容纳这一点

简而言之,我需要展开与父产品关联的所有组件的完整组件列表,无论它们是在子组件中还是子组件的子组件中,等等

理想情况下,我希望不惜一切代价避免使用光标:)

如有任何帮助/指导,将不胜感激

多谢各位

编辑; 根据要求,以下是表结构和预期输出。父节点是DRAWINGNO,子节点是PART(其本身也可以是父节点)


您希望使用递归公共表表达式(CTEs)。在线图书有很多关于如何使用这些的信息;在索引中,查找CTE并选择“使用公共表表达式的递归查询”条目。(我在链接到BOL online之前遇到过问题,或者我会尝试将其链接到此处。)

另外,如果你发布你的表格结构,你应该在五分钟内得到六个例子。更好的是,尝试并搜索前面的示例。

如果我理解(并且没有表结构),您可以尝试类似的方法

DECLARE @Table TABLE(
        Component VARCHAR(50),
        Parent VARCHAR(50),
        Cost FLOAT
)

INSERT INTO @Table SELECT 'B', 'A', 1
INSERT INTO @Table SELECT 'C', 'B', 2
INSERT INTO @Table SELECT 'C', 'B', 3
INSERT INTO @Table SELECT 'D', 'C', 4

DECLARE @Product VARCHAR(50)
SET @Product = 'A'

;WITH Selects AS (
        SELECT  *
        FROM    @Table
        WHERE   Parent = @Product
        UNION ALL
        SELECT  t.*
        FROM    @Table t INNER JOIN
                Selects s ON t.Parent = s.Component
)

SELECt  *
FROm    Selects

你能提供完美的桌子结构吗。非常感谢:)