【问题标题】:SQL 2008 HierarchyID - Select X descendants downSQL 2008 HierarchyID - 向下选择 X 个后代
【发布时间】:2010-05-04 20:14:23
【问题描述】:

如何查询具有 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
)

【问题讨论】:

标签: sql-server-2008 hierarchy hierarchical-data hierarchyid


【解决方案1】:

我想在上面补充一点。除了选择树的一个分支外,您通常只需要某个深度的后代。为此,许多表使用为“深度”添加额外的计算列(类似于 [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)

请注意,如果您严重依赖计算列(可能与其他列组合或包含),则可能需要对其进行索引。

【讨论】:

    猜你喜欢
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多