如何查询具有数据类型为HIERARCHYID的列的表,并获得某个employee下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
)发布于 2010-07-28 21:35:44
我想对上面的内容做一点补充。除了选择树的一个分支之外,您通常只想要某个深度的后代。为此,许多使用的表为"depth“添加了一个额外的计算列(类似于[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)注意,如果严重依赖计算列(可能与其他列组合在一起或包括在一起),则可能需要对其进行索引。
https://stackoverflow.com/questions/2768652
复制相似问题