2

Как я могу запросить таблицу с столбцом типа данных HIERARCHYID и получить список уровней X потомков под сотрудником?SQL Server 2008 HierarchyID - выберите X потомков вниз

Вот текущая структура:

CREATE TABLE [dbo].[Employees](
    [NodeId] [hierarchyid] NOT NULL, 
    [EmployeeId] [int] IDENTITY(1,1) NOT NULL, 
    [FirstName] [varchar](120) NULL, 
    [MiddleInitial] [varchar](1) NULL, 
    [LastName] [varchar](120) NULL, 
    [DepartmentId] [int] NULL, 
    [Title] [varchar](120) NULL, 
    [PhoneNumber] [varchar](20) NULL, 
    [IM] [varchar](120) NULL, 
    [Photo] [varbinary](max) NULL, 
    [Bio] [varchar](400) NULL, 
    [Active] [bit] NULL, 
    [ManagerId] [int] NULL 
) 
+0

Возможный дубликат http://stackoverflow.com/questions/2659721/how-to-find-all-descendants-using-hierarchyid-for-sql-server – IEnumerator

ответ

3

Я хотел бы добавить немного выше. Помимо выбора ветви дерева, вы часто хотите, чтобы потомки имели определенную глубину. Для этого многие таблицы используют дополнительный вычисленный столбец для «глубины» (что-то вроде [Depth] AS (myHierarchy.GetLevel]()). С помощью этого дополнительного столбца вы можете запускать такие запросы, как ограничение по глубине.

SELECT @MaxDepth  = 3, 

SELECT @theParent  = Hierarchy, 
     @theParentDepth = Depth 
FROM myTreeTable T 
WHERE T.RowID   = @RowID 

SELECT myHierarchy 
FROM  myTreeTable T 
WHERE  T.myHierarchy.IsDescendantOf(@theParent) = 1 AND 
      T.Depth < (@theParentDepth + @MaxDepth) 

Обратите внимание, вы можете индексировать вычисляемый столбец (возможно, в сочетании с или в том числе и некоторых других столбцов), если вы полагаетесь на него сильно.

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