शायद बेहतर तरीके हैं लेकिन नौकरी करने के लिए यह सीम हैं।
declare @T table
(
ID int,
Name varchar(10),
HID HierarchyID
)
insert into @T values
(1, 'Craig', '/'),
(2, 'Steve', '/1/'),
(3, 'John', '/1/1/'),
(4, 'Sam', '/2/'),
(5, 'Matt', '/2/1/'),
(6, 'Chris', '/2/1/1/')
select *
from @T
where HID.GetDescendant(null, null) not in (select HID
from @T)
परिणाम:
ID Name HID
----------- ---------- ---------------------
3 John 0x5AC0
6 Chris 0x6AD6
अद्यतन करता है, तो नोड संख्या एक अटूट अनुक्रम में नहीं है 2012-05-22
ऊपर क्वेरी असफल हो जायेगी। यहां एक और संस्करण है जिसका ध्यान रखना चाहिए।
declare @T table
(
ID int,
Name varchar(10),
HID HierarchyID
)
insert into @T values
(1, 'Craig', '/'),
(2, 'Steve', '/1/'),
(3, 'John', '/1/1/'),
(4, 'Sam', '/2/'),
(5, 'Matt', '/2/1/'),
(6, 'Chris', '/2/1/2/') -- HID for this row is changed compared to above query
select *
from @T
where HID not in (select HID.GetAncestor(1)
from @T
where HID.GetAncestor(1) is not null)
मैं काफी हद तक निश्चित ओपी एसक्यूएल सर्वर 2008 है, जो असामान्य प्रतिनिधित्व बताते हैं की 'HierarchyID' डेटा प्रकार का उपयोग कर रहा है (http://msdn.microsoft.com/en-us/magazine/cc794278 देखना .aspx)। –
@DanielPratt Ahh ... अब मुझे लगता है कि प्रश्न [एसक्यूएल-सर्वर] के रूप में फिर से टैग किया गया था। –
ब्रैंको का जवाब देने के लिए धन्यवाद, लेकिन मेरे उदाहरण में आईडी फ़ील्ड एक पूर्णांक है और HierarchyId एक वर्ग hierarchyId है, इसलिए उनकी तुलना नहीं की जा सकती है। क्या आप कह रहे हैं कि मुझे पदानुक्रम के लिए तालिका की कुंजी बदलने की जरूरत है? – Eric