He estado haciendo algunas pruebas, y parece que no necesita un registro con una raíz hierarchyid.
Por ejemplo, normalmente se haría un nodo raíz (nivel 1) y múltiples Childen, pero puede omitir el nodo raíz, al no tener registros de raíz, sólo los registros que comienzan en el nivel 2:
//table schema
CREATE TABLE [Entity](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL
[Hierarchy] [hierarchyid] NOT NULL,
CONSTRAINT [PK_Entity] PRIMARY KEY CLUSTERED
(
[ID] ASC
)
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
//Insert first 'root', which is technicall a child without a parent
INSERT INTO [Entity]
([Name]
,[Description]
,[Hierarchy])
VALUES
('Root A'
,hierarchyid::GetRoot().GetDescendant(NULL,NULL))
//Create the second 'root'
INSERT INTO [Entity]
([Name]
,[Hierarchy])
VALUES
('Root B'
,hierarchyid::GetRoot().GetDescendant((select MAX(hierarchy) from entity where hierarchy.GetAncestor(1) = hierarchyid::GetRoot()),NULL))
Ahora si selecciona todas las filas de la tabla, que se ve:
SELECT [ID]
,[Name]
,[Hierarchy],
[Hierarchy].ToString()
FROM [Entity]
ID Nombre Jerarquía (No nombre de la columna)
Root A 0x58 /1/
Root B 0x68 /2/
No estoy seguro si esto se recomienda la práctica pero conceptualmente le permite tener múltiples raíces, siempre y cuando se considere el segundo nivel en el árbol como el root
Esto no es correcto. Ver mi [respuesta] (http://stackoverflow.com/a/23290250/81595) para más detalles. –
@ScottMunro: mira mi comentario a tu respuesta. Creo que Marc está en lo cierto. Sin embargo, puede usar los elementos secundarios de root como nodos raíz – Phil
@Phil. En realidad, no se requiere que tenga un nodo "uber-root". Puede comenzar una jerarquía con un nodo como '/ 1 /' y tener un segundo como '/ 2 /' sin tener que tener '/' presente sobre ellos. –