首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL2008 HierarchyID -向下选择X子代

SQL2008 HierarchyID -向下选择X子代
EN

Stack Overflow用户
提问于 2010-05-05 04:14:24
回答 1查看 1.2K关注 0票数 2

如何查询具有数据类型为HIERARCHYID的列的表,并获得某个employee下X个级别的子代列表?

下面是当前的结构:

代码语言:javascript
复制
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
)
EN

回答 1

Stack Overflow用户

发布于 2010-07-28 21:35:44

我想对上面的内容做一点补充。除了选择树的一个分支之外,您通常只想要某个深度的后代。为此,许多使用的表为"depth“添加了一个额外的计算列(类似于[Depth] AS (myHierarchy.GetLevel]() )。有了这个额外的列,您可以运行如下所示的查询来限制深度。

代码语言:javascript
复制
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)

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2768652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档