IF OBJECT_ID(
'tempdb..#test'
,
'U'
)
IS
NOT
NULL
DROP
TABLE
#test;
GO
CREATE
#test
(
Childid
INT
parentid
);
INSERT
INTO
( Childid, parentid )
VALUES
( 100, 0 ),
( 102, 100 ),
( 103, 100 ),
( 104, 102 ),
( 105, 102 ),
( 106, 104 ),
( 107, 103 ),
( 109, 105 );
DECLARE
@rootId
AS
= 100;
WITH
Subs
SELECT
Childid ,
1
lvl ,
CAST
(1
VARBINARY(
MAX
))
PathSort
FROM
WHERE
Childid = @rootId
UNION
ALL
C.Childid ,
P.lvl + 1 ,
P.PathSort +
(ROW_NUMBER() OVER ( PARTITION
BY
C.parentid
ORDER
C.Childid )
BINARY
(5))
P
JOIN
C
ON
C.parentid = P.Childid
ROW_NUMBER() OVER (
PathSort )
CustomSort,
REPLICATE(
' | '
, lvl) +
(Childid
NVARCHAR(100)) ChildInTree
CustomSort;