2016-06-14 1 views
0

У меня есть проблема: Таблица I:SQL, OrgNode, Иерархия

SELECT OrgNode as 'hierarchyid' 
, OrgLevel as "non-type ' 
, UniCODOBJ as 'uniqueidentifier' 
, BitREQUIRED as "bit" 
, StrField as 'nvarchar (50)' 
, StrTITLE_FIELD as 'nvarchar (50)' 
, IntCODE_LENGTH as 'int' 
OF BOX_HIERARCHY 

и у меня есть запрос:

DECLARE @CurrentNode hierarchyid 
SELECT @ CurrentNode = OrgNode 
OF BOX_HIERARCHY 
where uniCODOBJ = 'CBC33732-2E4C-4103-887A-B968E53C0E05'; 

SELECT OrgNode, OrgNode.ToString() 
, OrgLevel 
, uniCODOBJ 
, bitREQUIRED 
, strField 
, strTITLE_FIELD 
, intCODE_LENGTH 
of BOX_HIERARCHY 
where OrgNode.IsDescendantOf (@CurrentNode) = 1 

но, этот запрос возвращает:

OrgNode OrgNode.string OrgLevel BitRequired 
0x78/3/1 1 
0x7AC0/3/1/2 1 
0x7AD6/3/1/1/3 0 
0x7AD6B0/3/1/1/1/4 0 
0x7AD6B580/3/1/1/1/1/5 1 
0x7AD6B5AC/3/1/1/1/1/1/6 1 

потому что OrgNode -> 0x78 имеют uniCODOBJ: CBC33732-2E4C-4103-887A-B968E53C0E05

где моя проблема? прямой сын необходимо только:

с OrgNode -> 0x78 имеют только 1 прямые дети

OrgNode OrgNode.string OrgLevel BitRequired

0x78/3/1 1 
0x7AC0/3/1/2 1 

с OrgNode -> 0x7AC0 3 Возможные прямые детей OrgNode OrgNode.string OrgLevel BitRequired

0x7AC0/3/1/2 1 
0x7AD6/3/1/1/3 0 
0x7AD6B0/3/1/1/1/4 0 
0x7AD6B580/3/1/1/1/1/5 1 

мой я заинтересован, чтобы получить запрос с КН чтобы получить все возможные прямые дети , но этот запрос возвращает мне всех родственников детей , если мне нужно пройти 3 уровня, как в случае с 0x7AD6B5AC, на уровне 6, с 3 уровнями ПОСЛЕДНИЕ 0x78 и сделать консультацию для 0x78, он возвращает мне все, что мне все равно.

ответ

0

Проводка раствора себя:

ALTER PROCEDURE [dbo].[GET_CHILD_REPOS] @id uniqueidentifier 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @hi hierarchyid; 
    SELECT @hi = OrgNode FROM BOX_HIERARCHY 
    WHERE uniCODOBJ = @id 

    SELECT h.OrgNode.ToString() AS OrgNode, h.OrgLevel, h.uniCODOBJ, h.bitREQUIRED, 
    strFIELD, t.strARCTAB, t.strNOMOBJ 
    FROM BOX_HIERARCHY h 
    INNER JOIN tabTABLAS t 
    ON h.uniCODOBJ = t.uniCODPAD 
    WHERE OrgNode.IsDescendantOf(@hi) = 1 
    AND OrgNode <> @hi 
    AND OrgLevel <= 
    (
     SELECT MIN(OrgLevel) 
     FROM 
     (
      SELECT h.OrgNode.ToString() AS OrgNode, h.OrgLevel, h.uniCODOBJ, h.bitREQUIRED, 
      strFIELD, t.strARCTAB, t.strNOMOBJ 
      FROM BOX_HIERARCHY h 
      INNER JOIN tabTABLAS t 
      ON h.uniCODOBJ = t.uniCODPAD 
      WHERE OrgNode.IsDescendantOf(@hi) = 1 
      AND OrgNode <> @hi 
     ) a 
     WHERE bitREQUIRED = 1 
    ) 
    ORDER BY OrgNode 

END 

 Смежные вопросы

  • Нет связанных вопросов^_^