sql server删除Hierarchy的一支

写下来以后便于查找


SQL server 2008R2, 如果一个表格是Hierarchy的有三列,如下

ID, Name,ParentID

1    A          NULL

2    B           1

3    C           1

4    D           2

5    E           4


如果我想删除(查询)B以及以下所有节点怎么办呢


1,需要Recursive的选出来

	WITH cetAlias AS 
	(SELECT t.[id],t.[name],t.parentid FROM yaqitest t
	 WHERE t.id=2
	 UNION ALL
	 SELECT t.[id],t.[name],t.parentid FROM yaqitest t
	 INNER JOIN cetAlias parent ON t.parentid=parent.id)
	 
	 SELECT * FROM cetAlias ct

2, 有的时候需要看看数据是否在别的表中用到,数据库中应该有这个限制。可惜我们没有,后来因为烂数据不好加

3,删除。如果中间需要做什么可以把cetAlias导入到一个临时表格中搞定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server中的层次结构超类型(Hierarchyid)是一种特殊的数据类型,用于存储层次结构数据,例如组织机构、分类结构等。该数据类型包含一个根节点和多个子节点,每个节点都有一个唯一的标识符。 使用层次结构超类型可以方便地进行层次结构查询和操作,如查找某个节点的所有子节点或父节点,获取节点的深度和路径等。此外,它还提供了许多内置函数和操作符,如GetAncestor、GetDescendant、IsDescendantOf等,可用于处理和管理层次结构数据。 例如,以下是一个用层次结构超类型表示的组织机构示例: ``` DECLARE @org_hierarchy hierarchyid SET @org_hierarchy = '/1/' INSERT INTO org_hierarchy (node_id, node_name, parent_id) VALUES (@org_hierarchy, 'CEO', NULL) SET @org_hierarchy = @org_hierarchy.GetDescendant(NULL, NULL) INSERT INTO org_hierarchy (node_id, node_name, parent_id) VALUES (@org_hierarchy, 'CFO', (SELECT node_id FROM org_hierarchy WHERE node_name = 'CEO')) SET @org_hierarchy = @org_hierarchy.GetDescendant(NULL, NULL) INSERT INTO org_hierarchy (node_id, node_name, parent_id) VALUES (@org_hierarchy, 'CTO', (SELECT node_id FROM org_hierarchy WHERE node_name = 'CEO')) SET @org_hierarchy = @org_hierarchy.GetDescendant(NULL, NULL) INSERT INTO org_hierarchy (node_id, node_name, parent_id) VALUES (@org_hierarchy, 'VP of Marketing', (SELECT node_id FROM org_hierarchy WHERE node_name = 'CFO')) SET @org_hierarchy = @org_hierarchy.GetDescendant(NULL, NULL) INSERT INTO org_hierarchy (node_id, node_name, parent_id) VALUES (@org_hierarchy, 'VP of Engineering', (SELECT node_id FROM org_hierarchy WHERE node_name = 'CTO')) ``` 以上示例创建了一个包含CEO、CFO、CTO、VP of Marketing和VP of Engineering五个节点的组织机构,每个节点都有一个唯一的标识符,可以通过内置函数和操作符进行查询和操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值