
复制---prepare test data SET NOCOUNT ON; CREATE TABLE dbo.Parts ( partid INT NOT NULL PRIMARY KEY,语法 partname VARCHAR(25) NOT NULL ); INSERT INTO dbo.Parts(partid, partname) select 1, Black Tea union all select 2, White Tea union all select 3, Latte union all select 4, Espresso CREATE TABLE dbo.BOM ( partid INT NOT NULL REFERENCES dbo.Parts, assemblyid INT NULL REFERENCES dbo.Parts, unit VARCHAR(3) NOT NULL, qty DECIMAL(8, 2) NOT NULL, UNIQUE(partid, assemblyid), CHECK (partid <> assemblyid) ); INSERT INTO dbo.BOM(partid, assemblyid, unit, qty) select 1, NULL, EA, 1.00 union all select 2, 1, EA, 1.00 union all select 3, 2, EA, 1.00 union all select 4, 3, EA, 1.00 -- perform the test WITH BOMTC AS( SELECT assemblyid, partid FROM dbo.BOM WHERE assemblyid IS NOT NULL UNION ALL SELECT P.assemblyid, C.partid FROM BOMTC AS P JOIN dbo.BOM AS C ON C.assemblyid = P.partid ) SELECT DISTINCT assemblyid, partid FROM BOMTC; 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.








