如何查询具有数据类型为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 :(得分: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)
注意,如果您严重依赖计算列,可能需要对计算列进行索引(可能与其他列结合使用)。
答案 1 :(得分:0)