标签: hierarchyid

具有多个根节点的SQL 2008 HierarchyID

我想在SQL Server 2008中使用新的HierarchyID类型来处理小型wiki应用程序中的页面关系.但是,它需要有多个根节点,因为每个帐户的每个主要文章/页面都是根节点.

从我所看到的HierarchyID类型只允许每列1个根节点是正确的吗?有没有办法启用多个根节点?

sql-server hierarchyid

27
推荐指数
5
解决办法
1万
查看次数

如何使用SQL Server 2008 hierarchyid获取节点的所有祖先?

给定一个带有hierarchyid类型列的表,如何编写查询以返回特定节点的祖先的所有行?

有一个IsDescendantOf()功能,非常适合孩子们,但没有相应的IsAncestorOf()功能来返回祖先(并且缺少一个GetAncestors()功能似乎是一个疏忽.)

sql-server hierarchyid

26
推荐指数
2
解决办法
2万
查看次数

NHibernate中的SQL 2008 HierarchyID支持

搜索了各种NHibernate列表,并没有提出明确的答案.在SQL2008方言似乎并不具有对HIERARCHYID数据类型的支持-新的日期和时间仅类型.

有没有人有一个好的实施或有效的解决方法?我真的想在我的新应用程序中利用HierarchyID.MS自己的工具非常缺乏对这种有趣且强大的数据类型的支持,所以我并不感到震惊的是NHibernate没有支持.

一些 方法我还没有深入研究过.想知道是否有人在哪些方面有效,哪些方面更有效,等等.

完全披露:我正在使用Castle ActiveRecord,但这似乎是一个NHibernate问题.

nhibernate hierarchyid sql-server-2008

21
推荐指数
2
解决办法
2503
查看次数

分层SQL数据(递归CTE与HierarchyID与闭包表)

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

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

  1. 我可以创建Recursive CTEsCommon Table Expression(也就是RCTE)来处理分层数据.这似乎是正常访问最简单的方法,但我担心在用于确定子对象的权限级别时可能会很慢.
  2. 我可以创建一个hierarchyId表中,并使用SQL Server所提供的功能,如数据类型字段GetAncestor(),IsDescendantOf()和等,这似乎将让查询很容易,但似乎需要一个相当复杂的插入/更新触发器,以保持HIERARCHYID域是正确的通过插入和移动
  3. 我可以创建一个closure table,它将存储表中的所有关系.我想象如下:父列和子列,每个父 - >子关系将被表示.(即1-> 2 2-> 3将在数据库中表示为1-2,1-3,2-3).缺点是这需要插入,更新和删除触发器,即使它们非常简单,并且此方法会生成大量记录.

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

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

sql-server recursive-query common-table-expression hierarchyid transitive-closure-table

15
推荐指数
1
解决办法
7197
查看次数

如何使用HierarchyID为SQL Server查找所有后代

我需要使用HierarchyIDfor 找到所有类别的后代SQL Server.

我知道如何找到直接的孩子,但我想找到孩子的孩子等等.

有没有办法使用HierarchyID

sql t-sql hierarchyid sql-server-2008

13
推荐指数
2
解决办法
2万
查看次数

物化路径模式VS Hierarchyid

我正在阅读SQL server 2008圣经,它说物化路径模式明显快于hierarchyid.这是真的吗?如何使hierarchyid具有相同或更好的性能.

hierarchyid sql-server-2008 materialized-path-pattern c#-4.0

12
推荐指数
1
解决办法
4156
查看次数

实体框架中的HierarchyID不起作用

我们正在为我们的应用程序使用基于实体框架模型的WCF数据服务.

在这里我们需要添加一个类型列的表HierarchyId.当我将该表添加到EDMX文件时,该HierarchId列不会出现在类文件中.

我该怎么做才能利用HierarchyID?我读到实体框架不支持HierarchyID,那么我该如何实现呢?

c# entity-framework hierarchyid

12
推荐指数
2
解决办法
9812
查看次数

关于HierarchyId的一些问题(SQL Server 2008)

我是SQL Server 2008的新手,刚刚介绍了HierarchyId.

我正在学习SQL Server 2008 - HIERARCHYID - 第一部分.所以基本上我是逐行跟踪文章,在SSMS中练习时,我发现对于每个ChildId,生成一些十六进制值,如0x,0x58,0x5AC0等.

我的问题是

  1. 这些十六进制值是什么?
  2. 为什么会产生这些产品?它们的用途是什么?我的意思是我在哪里可以使用这些hexa值?
  3. 我们对这些hexa值有任何控制吗?我的意思是我们可以更新等
  4. 如何通过查看这些hexa值来确定层次结构..我的意思是如何确定哪个是父项,哪个是孩子?

t-sql sql-server hierarchyid sql-server-2008

11
推荐指数
2
解决办法
3896
查看次数

在DB中表示文件系统(在SQL Server 2008中使用hierarchyid)

我没有找到任何具体的例子,但我有兴趣使用hierarchyid数据类型来表示具有更新等的整个目录结构.这是为hierarchyid引用的常见用例,但我找不到构建这样一个示例的任何文章.

我只想表示一个完整的目录结构,例如:

/dir1
/file1
/dir2
/dir2/dir3
/dir2/dir3/file2
Run Code Online (Sandbox Code Playgroud)

**我不是想与磁盘上的文件系统同步.它纯粹通过数据库表示.**

database hierarchyid sql-server-2008

9
推荐指数
1
解决办法
3783
查看次数

HierarchyID:获取父项列表的所有后代

我有一个像这样的父ID列表,100, 110, 120, 130它是动态的,可以改变.我希望在一组中获得指定父项的所有后代.为了获得单亲的孩子,我使用了这样的查询:

WITH parent AS (
    SELECT PersonHierarchyID FROM PersonHierarchy
    WHERE PersonID = 100    
)
SELECT * FROM PersonHierarchy
WHERE PersonHierarchyID.IsDescendantOf((SELECT * FROM parent)) = 1
Run Code Online (Sandbox Code Playgroud)

不知道如何为多个父母这样做.我的第一次尝试是写几个工会的东西,但我确信应该有更聪明的方法来做到这一点.

SELECT * FROM PersonHierarchy 
WHERE PersonHierarchyID.IsDescendantOf(
    (SELECT PersonHierarchyID FROM PersonHierarchy WHERE PersonID = 100)
) = 1
UNION ALL
SELECT * FROM PersonHierarchy 
WHERE PersonHierarchyID.IsDescendantOf(
    (SELECT PersonHierarchyID FROM PersonHierarchy WHERE PersonID = 110)
) = 1
UNION ALL ...
Run Code Online (Sandbox Code Playgroud)

PS我也发现这样的查询来选择可能有用的ID列表:

SELECT * FROM (VALUES (100), (110), (120), (130)) AS …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server hierarchyid

9
推荐指数
2
解决办法
1万
查看次数