问题标签 [hierarchyid]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3534 浏览

sql - SQL Server 嵌套集与 Hierarchyid 性能

我有一个分层数据。最常见的查询是“获取节点的父分支”和“获取节点的子树”。更新和插入不太可能经常发生。我在嵌套集和hierarchyid之间进行选择。就我而言,在索引列上搜索嵌套集应该非常快,但是,我不知道hierarchyid的内部实现。为了达到可能的最高性能,我应该使用什么?

0 投票
1 回答
718 浏览

nhibernate - 如何在 nHibernate 中从 HierarchyId 填充一组子项

我有映射的父端,但不确定如何正确映射子端。

父映射

我想孩子们会像这样绘制地图。如何将父 HierarchyId 填充到 where 子句中?

儿童测绘

0 投票
1 回答
749 浏览

c# - KendoUI TreeView 中的 HierarchyId

我是 KendoUI 的新手,所以我想知道是否/如何在我的 KendoUI TreeView 中使用我的 sql 服务器数据库中的新 HierarchyId 数据类型表示的数据。关于如何解决这个问题有什么建议吗?

0 投票
2 回答
1256 浏览

sql - HierarchyId 有后代查询

给定以下架构和数据:

我怎样才能得到以下结果:

0 投票
2 回答
3211 浏览

c# - 来自 Datarow 的 SqlHierarchyID 强制转换

我正在尝试从已从 SQL Server 数据库获取的 DataRow 中检索 C# 中的 SqlHierarchyID 数据类型。在数据库调用之后,如果我写以下内容:

然后在 Visual Studio 中使用手表检查 id 的值,它持有正确的层次结构值(并且非空)。

但是,以下所有情况都会引发 InvalidCastException:

此外,要求对两个对象的分配能力进行反思:

此外,尝试“软演员”返回 null:

  • 尝试一切作为 SqlHierarchyId?数据类型是徒劳的。
  • 我正在引用 32 位程序集,并尝试在 64 位和 32 位模式下编译我的解决方案。
  • 初始化一个空的 SqlHierarchyId 实例然后分配它没有帮助。

谢谢你的帮助!

-JT

编辑:程序集来自 SQL Server Express 2012 (x86) SDK 目录。

0 投票
0 回答
121 浏览

sql-server-2008 - 在 SQL 中以分层显示形式显示数据的最佳方法是什么(HIERARCHYID 无法正常工作)?

在分层显示中显示数据的最佳方法是什么,我在 sql 中使用了 HIERARCHYID,但是当它的级别超过 10(水平和垂直)级别时,我无法正确获取数据。

请分享您的经验。

0 投票
2 回答
1678 浏览

sql-server - 查找所有具有hierarchyid子节点的节点

鉴于此表:

如何找到没有任何子节点的所有行?

我有以下似乎可行的方法,但似乎应该有一种不那么复杂的方式:

0 投票
1 回答
2149 浏览

sql - 使用 HierarchyId 获取直接后代计数

SQL Server 2008 带/hierarchyId

鉴于这种结构:

我可以运行以下子查询来获取每个节点的直系后代计数,但效率不高。

结果:

对于这种类型的操作,什么是更有效的查询hierarchyid

谢谢你的帮助!

0 投票
1 回答
1957 浏览

sql-server-2008 - 使用 SQL server hierarchyid 如何在祖先级别聚合叶节点值

基于以下输出

在此处输入图像描述

我想汇总祖先级别的金额,即城市/州/国家。例如:在上面的示例中,我们有国家 Australia 和两个州(VIC 和 NSW)。维多利亚州有两个城市(墨尔本和本迪戈),新南威尔士州没有城市。查询的结果应该显示完全相同数量的记录,但在祖先级别汇总数量。比如说,墨尔本应该显示 800,VIC 应该显示 1300,澳大利亚应该显示 2500,如下所示:

在此处输入图像描述

是否可以使用层次结构的 GetAncestor 函数使用递归 CTE 来做到这一点?

CREATE TABLE #Test ( EmployeeNode hierarchyid, EmployeeName varchar(50), Location varchar(50), Amount decimal )

ALTER TABLE #Test ADD [Level] as EmployeeNode.GetLevel()

INSERT INTO #Test (EmployeeNode, Location, EmployeeName, Amount) VALUES (CAST('/0/' AS hierarchyid), 'Australia', NULL, NULL)

INSERT INTO #Test (EmployeeNode, Location, EmployeeName, Amount) VALUES (CAST('/0/1/' AS hierarchyid), 'VIC', NULL, NULL)

INSERT INTO #Test (EmployeeNode, Location, EmployeeName, Amount) VALUES (CAST('/0/1/1/' AS hierarchyid), 'Melbourne', NULL, NULL)

INSERT INTO #Test (EmployeeNode, Location, EmployeeName, Amount) VALUES (CAST('/0/1/1/1/' AS hierarchyid), NULL, 'Mary', 300.00)

INSERT INTO #Test (EmployeeNode, Location, EmployeeName, Amount) VALUES (CAST('/0/1/1/2/' AS hierarchyid), NULL, 'Timothy', 500.00)

INSERT INTO #Test (EmployeeNode, Location, EmployeeName, Amount) VALUES (CAST('/0/1/2/' AS hierarchyid), 'Bendigo', NULL, NULL)

INSERT INTO #Test (EmployeeNode, Location, EmployeeName, Amount) VALUES (CAST('/0/1/2/1/' AS hierarchyid), NULL, 'Paul', 500.00)

INSERT INTO #Test (EmployeeNode, Location, EmployeeName, Amount) VALUES (CAST('/0/2/' AS hierarchyid), 'NSW', NULL, NULL)

INSERT INTO #Test (EmployeeNode, Location, EmployeeName, Amount) VALUES (CAST('/0/2/1/' AS hierarchyid), 'NSW', 'Peter', 1200.00)

SELECT t.EmployeeNode.ToString(), t.* FROM #Test t

0 投票
1 回答
8925 浏览

sql-server - 分层 SQL 数据(递归 CTE vs HierarchyID vs 闭包表)

我有一组在 SQL Server 数据库中使用的分层数据。数据以 guid 作为主键存储,parentGuid 作为指向对象直接父对象的外键存储。我最常通过 WebApi 项目中的实体框架访问数据。为了使情况更复杂一点,我还需要基于此层次结构管理权限,以便应用于父级的权限适用于其所有后代。我的问题是这样的:

我已经搜遍了,无法决定哪种方法最适合处理这种情况。我知道我有以下选择。

  1. 我可以创建Recursive CTEs通用表表达式(又名 RCTE)来处理分层数据。这似乎是正常访问最简单的方法,但我担心在用于确定子对象的权限级别时它可能会很慢。
  2. 我可以在表中创建一个hierarchyId数据类型字段并使用 SQL Server 提供的函数,GetAncestor()IsDescendantOf()通过插入和移动
  3. 我可以创建一个closure table,它将所有关系存储在表中。我想象它是这样的:父列和子列,每个父->子关系都将被表示。(即 1->2 2->3 将在数据库中表示为 1-2、1-3、2-3)。缺点是这需要插入、更新和删除触发器,尽管它们相当简单,而且这种方法会生成大量记录。

我已经尝试过搜索,在这三种方法之间找不到任何建议。

PS我也对这个问题的任何替代解决方案持开放态度