问题标签 [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.
sql - 如何在 SQL Server 中有效地合并两个层次结构?
我有两个带有 hierarchyid 字段的表,其中一个是一个临时表,其中包含需要合并到另一个中的新数据(即需要添加到主树的一组节点,其中一些可能已经是那里)。
除了定义树结构(父/子关系)的 hierarchyid 列。每个表都有一个单独的列,其中包含唯一标识每个节点的节点标识符。也就是说,判断临时表中的节点是否已经在主表中的方法是通过节点 ID,而不是通过 hierarchyid 列。
当务之急,需要执行的处理看起来像这样:
重要的是,这种方法只有在暂存表中的树以广度优先顺序排序/遍历时才有效——这样当遇到 RS 时,可以保证其父 PS 在主表中已经有相应的行。
到目前为止,我可以看到在 SQL Server 中实现此目的的唯一方法是在暂存表(已经排序)上使用游标,并为每一行调用一个存储过程,该过程基本上完全按照上述方式完成,并带有 SELECT MAX() 查找已经作为 PM 的子级存在的最高层次结构 ID,以便可以唯一地添加子级。
不过,这是一种非常低效的方法,而且对于我的目的来说太慢了。有没有更好的办法?
作为背景,这是我正在做的一种可行性检查。我需要弄清楚我是否可以在 SQL Server 中快速执行此操作。如果事实证明我不能,我将不得不在数据库之外以另一种方式进行。树的合并是问题域所固有的(实际上,在某种意义上是),因此以不同的方式构造数据或采取更广泛的观点并试图以某种方式完全避免执行此操作不是一种选择。
更新
根据要求,这是一个具体的例子。
表“staging”和“main”都有相同的两列:
初始内容
主要的:
分期:
所需内容
主要的:
请注意,暂存表中具有hierarchy_id /1/1/ 的节点对应于目标表中具有hiearchy_id /1/2/ 的节点(这就是node_id 很重要的原因——不能只复制hierarchy_id 值)。另请注意,将 node_id 为 6 的新节点添加为正确父节点的子节点,即 node_id 为 3 的节点,这就是 hierarchy_id 很重要的原因 - 它定义了任何新节点的树结构(父/子关系)。任何解决方案都需要考虑这两个方面。
database - 表示 DB 中的文件系统(在 SQL Server 2008 中使用 hierarchyid)
我还没有找到任何具体的例子,但我有兴趣使用 hierarchyid 数据类型来表示带有更新等的整个目录结构。这是hierarchyid 引用的一个常见用例,但我找不到任何构建此类示例的文章。
我只想代表一个完整的目录结构,例如:
** 我没有尝试将它与磁盘上的文件系统同步。它纯粹是通过数据库来表示的。**
sql-server-2008 - 使用hierarchyid 存储客户的地址
我有一个名为“AddressDemo”的表来存储客户的地址,其中包含以下字段,
存在层次结构的地方,类似于 州 --> 区 --> Taluk --> 村 --> Street1 --> Street2
保留一个单独的表来存储层次结构以避免重复数据不是一个好主意。下面怎么样
所以“AddressDemo”将如下所示
和LocationID
AddressDemo 对LocationID
LocationDemo 的引用。
sql-server-2008 - 更新 SQL Server 2008 中的所有 HierarchyID 节点
我正在将数据从一个数据库导入到另一个数据库。该hierarchyid
列还必须在关系完好无损的情况下进行移植。
如果目标表是空的,这很容易。当目标包含行时,源表中的层次结构在目标表中将无效
最简单的方法是使用第一个移植行的主键的值递增层次结构字段中的所有值。
因此,如果源行的hierarchyid
原为'/1/12/13/'
并且在导入之前目标中的下一个可用 id 为 101,则层次结构应更改,因此每个值都增加 100: '/101/112/113/'
我已阅读SQL Server 中的更新“Hierarchyid”,但看不到它如何应用于我的问题。
我将如何将每行的每个 hierarchyid 中的每个数字增加 1 个设置值,即将层次结构字段中的所有数字增加 100?
sql-server - 在插入触发器后更新 SQL Server HierarchyId
我正在信息系统中开发消息中心,今天用户 Eric 建议使用 hierarchyid 数据类型来跟踪消息回复,因为目标是显示为 Outlook 或 Gmail 对话。
为了简化,我在我的数据库表 Messages 中有:
当插入新消息时,我有一个触发器来进行更新。
我插入了一条新消息,层次结构为空,因为是第一条消息,而不是回复。
如果尝试插入对该消息的回复,则 hierarchyid 仍然为空... :(
我的触发器:
我做错了什么?
另一点,我读过索引,但深度优先不适合,因为有很多空值,因为来自对话的第一条消息具有空值,而面包优先是最好的索引类型,具有更好的表现?或者我可以丢弃这个索引?
提前致谢!
编辑:
我已经更新了触发器,但没有hierarchyid
以正确的方式进行。
现在触发器是:
如果我插入诸如id = 2
hasparentId = 1
和id = 3
has之类的消息,则parentId = 2
具有此层次结构:
id = 1, hierarchy = \
id = 2, hierarchy = \1\
id = 3, hierarchy = \1\1\
第一个和第二个记录具有正确的层次结构,但下一个没有...... :(
有什么线索吗?
sql - Sql Hierarchy ID 按级别排序
是否可以按层次结构 ID 对层次结构中的 sql 数据进行排序,然后按字母顺序对每个级别进行排序?
假设我们有一个员工表,它根据员工 ID 列出组织层次结构
Bob (5) 有 Phil (17) 和 Charlie (28) 向他汇报,而 Josie (6) 有 Tyler (15) 和 Mike (56) 向她汇报。
如果您按 HierarchyID 对其进行排序,它将如下所示:
Bob (/5/)
--Phil (/5/17/)
--Charlie (/5/28/)
Josie (/6/)
--Tyler (/6/15/)
--Mike (/6/56 /)
但让它看起来可能更有意义
鲍勃——
查理——菲尔乔西
——
迈克
——
泰勒
这是否可能而不会变得过于复杂?
sql-server - T-SQL 中的 HierarchyID 聚合函数
我被要求查询一个时间记录数据库,以显示为给定项目完成的所有工作。每个项目都被分解为任务,每个任务本身都可以被分解为任务。任务层次结构可以是任意数量的深度。部分要求是提供层次结构中每个任务或节点的总工作时间(不仅仅是叶级节点,而是所有节点,包括顶级项目节点、叶级节点和介于两者之间的所有节点)。
使用这样的层次结构我认为使用 HIERARCHYID 数据类型可能很有用。有没有什么方法可以在层次结构上使用 ROLLUP 进行 SUM 之类的操作,以便为层次结构中的每个节点提供小计?
我认为这种层次结构上的聚合汇总将是一个常见的要求,但我完全没有运气找到如何做到这一点,或者即使它是可能的。
azure-sql-database - SQL Azure HierarchyId 支持?
我想知道是否有人可以确定 SQL Azure 是否支持层次结构节点,以及它与 SQL 2008 的层次结构 ID 在性能/可扩展性方面的可比性。
基本上,我们正在考虑迁移一个系统,该系统在性能非常关键的方法中广泛使用现有 HierarchyId,并且对该功能的支持是该项目的巨大游戏规则改变者,但我无法访问 SQL Azure 数据库来目前自己测试一下。
作为 2010 年发布的 SQL Azure SU3 的一部分,我发现了一些对其的引用,但同时我与微软有矛盾,他们基本上说 SQL Azure 不支持它(直接与官方公告相反,不幸的是不直接对我来说,所以我不能像我想要的那样质疑它)......
我希望对 Azure 有一点经验的人可以让我知道哪一方面是正确的,如果该功能存在,其性能是否可以与 SQL Server 2008 相媲美?
sql - 如何从 SQL 查询构建对象层次结构?(对于 WPF 树视图)
感谢您抽出时间阅读这篇文章。
从我的 SQL 数据库获取数据时,我在尝试构建分层对象时遇到了麻烦。请注意,我是一个新手程序员。
如何构建具有未知级别的分层对象?当我说未知级别时,我的意思是每个节点可能有不同数量的子节点,而子节点又可能有不同数量的自己的子节点,依此类推。
这个想法是我需要使用我的 SQL 数据创建一个层次对象来绑定到 WPF TreeView 控件。
下面我已经包含了我到目前为止的代码。第一段代码是我的由属性组成的类。请注意,“Products”类有一个 ObservableCollection 引用自身。我认为这就是构建嵌套节点的方式。即列表中的列表。
第二段代码是我从 SQL 数据库下载数据的 Get 方法。这是我需要了解如何将下载的数据分类为层次结构的地方。
产品类(属性)
从 SQL DB 获取数据的方法:
下面我附上了一张图片,显示了我的 SQL 查询数据的结构。请注意,将来添加更多产品时,层次结构级别可能会更深。无论节点级别的数量是多少,我需要创建的 Hierarchy 对象都应该足够灵活以进行扩展。
非常感谢您的宝贵时间,非常感谢您提供的所有帮助。
********* 编辑 26/04/2012 14:37 *******************
请在下面找到下载我的项目代码的链接(这仅包含树视图代码)。有人可以看看它,看看为什么我不能创建超过 2 个级别的节点吗?
该代码是由用户 HB MAAM 提供给我的。感谢“HB MAAM”到目前为止的帮助!