मैं कुछ परीक्षण कर रहा हूं, और ऐसा लगता है कि आपको रूट पदानुक्रम के साथ रिकॉर्ड की आवश्यकता नहीं है।
उदाहरण के लिए, सामान्य रूप से आप एक रूट नोड (स्तर 1) और कई childen, लेकिन आप रूट नोड को छोड़ सकते हैं हैं, कोई जड़ रिकॉर्ड, सिर्फ रिकॉर्ड स्तर 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))
अब यदि आप तालिका से सभी पंक्तियों का चयन करें, आप देखते हैं:
SELECT [ID]
,[Name]
,[Hierarchy],
[Hierarchy].ToString()
FROM [Entity]
आईडी नाम पदानुक्रम (कोई स्तंभ नाम)
रूट एक 0x58 /1/
रूट बी 0x68 /2/
मुझे यकीन है कि इस अभ्यास की सिफारिश की जाएगी अगर नहीं कर रहा हूँ लेकिन धारणात्मक यह आप के रूप में लंबे समय के रूप, आप कई जड़ों की अनुमति देता है पेड़ में दूसरे स्तर को रूट के रूप में देखें
यह सही नहीं है। विवरण के लिए मेरा [उत्तर] (http://stackoverflow.com/a/23290250/81595) देखें। –
@ScottMunro: अपने उत्तर पर मेरी टिप्पणी देखें। मेरा मानना है कि मार्क सही है। हालांकि, आप जड़ के बच्चों को रूट-नोड्स – Phil
@ फिल के रूप में उपयोग करने के लिए स्वतंत्र हैं, आपको वास्तव में "उबर-रूट" नोड रखने की आवश्यकता नहीं है। आप '/ 1 /' जैसे नोड के साथ पदानुक्रम शुरू कर सकते हैं और उनके ऊपर मौजूद '/' होने के बिना '/ 2 /' जैसे दूसरे को प्राप्त कर सकते हैं। –