您可以使用CTE的這樣;
CREATE TABLE TestTable
(
ID int primary key NOT NULL,
ParentID int
)
INSERT INTO TestTable VALUES (0, null)
INSERT INTO TestTable VALUES (1, 0)
INSERT INTO TestTable VALUES (2, 0)
INSERT INTO TestTable VALUES (3, 1)
INSERT INTO TestTable VALUES (4, 3)
-- Get branch
;WITH TreeRecCTE (ID, ParentID, IDPath)
AS
(
SELECT ID, ParentID, CONVERT(varchar(max), ID) As IDPath
FROM TestTable
WHERE ParentID IS NULL
UNION ALL
SELECT
Child.ID,
Child.ParentID,
Parent.IDPath + '.' + CONVERT(varchar(100),Child.ID) As IDPath
FROM TestTable As Child INNER JOIN TreeRecCTE AS Parent ON Child.ParentID = Parent.ID
)
SELECT * FROM TreeRecCTE WHERE IDPath LIKE '%.1.%' ORDER BY ParentID ASC
-- Get complete tree:
;WITH TreeRecCTE (ID, ParentID, IDPath)
AS
(
SELECT ID, ParentID, CONVERT(varchar(max), ID) As IDPath
FROM TestTable
WHERE ParentID IS NULL
UNION ALL
SELECT
Child.ID,
Child.ParentID,
Parent.IDPath + '.' + CONVERT(varchar(100),Child.ID) As IDPath
FROM TestTable As Child INNER JOIN TreeRecCTE AS Parent ON Child.ParentID = Parent.ID
)
SELECT * FROM TreeRecCTE ORDER BY ParentID ASC
這爲我工作,但我必須說,這是做這種事情相當鈍的方式。 – JosephStyons 2009-05-29 15:40:54