Here is one example:
CREATE TABLE Foo (
category_hid HIERARCHYID NOT NULL PRIMARY KEY,
category_name VARCHAR(30));
INSERT INTO Foo VALUES(hierarchyid::GetRoot(), 'Root');
DECLARE @hid HIERARCHYID;
SELECT @hid = hierarchyid::GetRoot()
FROM Foo;
INSERT INTO Foo VALUES(@hid.GetDescendant(NULL, NULL), 'Electronics');
SELECT @hid = category_hid
FROM Foo
WHERE category_name = 'Electronics';
INSERT INTO Foo VALUES(@hid.GetDescendant(NULL, NULL), 'Digital Media
Players');
WITH Hierarchy AS (
SELECT category_hid, category_name, CAST(category_name AS
VARCHAR(MAX)) AS category_path
FROM Foo
WHERE category_hid = hierarchyid::GetRoot()
UNION ALL
SELECT F.category_hid, F.category_name, H.category_path + ' > ' +
F.category_name
FROM Foo AS F
JOIN Hierarchy AS H
ON F.category_hid.GetAncestor(1) = H.category_hid)
SELECT category_hid, category_name, category_path
FROM Hierarchy;
/*
category_hid category_name category_path
-------------- ------------------------------
--------------------------------------------
0x Root Root
0x58 Electronics Root > Electronics
0x5AC0 Digital Media Players Root > Electronics >
Digital Media Players
*/
--
Plamen Ratchev
http://www.SQLStudio.com