如何在SqlServer中使用层级节点类型hierarchyid
Sql Server2008开始新增的 hierarchyid 数据类型使存储和查询层次结构数据变得更为简单。
为了使用这个类型,笔者在此进行简单记录,同时为需要的朋友提供一个简单的参考。
--获取层级
select Dep.GetLevel() Level from UserInfo --查看所有的下级节点
select Dep.ToString() from UserInfo where Dep.IsDescendantOf('/11/1/')=1 --查看下属一级的所有节点(下属2级则改为2,三级可改为3,返回的数据只包含一层)
select Dep.ToString() from UserInfo where Dep.GetAncestor(3) = hierarchyid::Parse('/11/1/') --查看所有的上级节点
select Dep.ToString() from UserInfo where hierarchyid::Parse('/11/1/1/1/1/1/1/1/1/').IsDescendantOf(Dep)=1 --插入新节点(插入与当前层级节点相同的新节点hierarchyid)
insert into UserInfo(UserName,Email,Dep) values(hierarchyid::Parse('/11/1/').GetDescendant('/11/1/1/1/1/1/1/1/1/', NULL),'111@qq.com','测试在/11/1/1/1/1/1/1/1/1/相同层级中插入新用户') --插入新节点(在父节点下插入第一个子节点hierarchyid)
insert into UserInfo(UserName,Email,Dep) values(hierarchyid::Parse('/11/1/').GetDescendant(NULL, NULL),'111@qq.com','测试在/11/1下插入第一个子节点') --插入新节点(两个相同节点之间插入hierarchyid)
insert into UserInfo(UserName,Email,Dep) values(hierarchyid::Parse('/11/1/').GetDescendant('/11/1/1/1/1/1/1/1/1/', '/11/1/1/1/1/1/1/1/2/'),'111@qq.com','测试在/11/1/1/1/1/1/1/1/1/与/11/1/1/1/1/1/1/1/2/之间插入新用户') --修改节点(需要两个参数:原节点数据hierarchyid,新节点数据hierarchyid)。例如要将'/11/1/1/2/' 修改到 '/11/2/'下的'/11/2/1/1'的相同层级
update UserInfo set Dep=Dep.GetReparentedValue(hierarchyid::Parse('/11/1/1/2/'), hierarchyid::Parse('/11/2/1/1'))
以上就是 hierarchyid 类型的简单使用。
注:varchar 类型的 与 hierarchyid 类型的转换
varchar-->hierarchyid: Dep.ToString()
hierarchyid-->varchar: hierarchyid::Parse('/11/1')
喜欢本文章的朋友,欢迎关注公众号【程序员在职场】支持一下作者哦。

如何在SqlServer中使用层级节点类型hierarchyid的更多相关文章
- 我是如何在SQLServer中处理每天四亿三千万记录的
首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...
- 【转】我是如何在SQLServer中处理每天四亿三千万记录的
原文转自:http://blog.jobbole.com/80395/ 首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文 ...
- 如何在SQLServer中处理每天四亿三千万记录
首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...
- (转)我是如何在SQLServer中处理每天四亿三千万记录的
首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...
- (转)我是如何在SQLServer中处理每天四亿三千万记录的
首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...
- 我是如何在SQLServer中处理每天四亿三千万记录的(转)
出处:http://www.cnblogs.com/marvin/p/HowCanIHandleBigDataBySQLServer.html 首先声明,我只是个程序员,不是专业的DBA,以下这篇文章 ...
- 如何在SQLServer中处理每天四亿三千万记录的(数据库大数据处理)
首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...
- 如何在SQLServer中处理每天四亿三千万记录的
项目背景 这是给某数据中心做的一个项目,项目难度之大令人发指,这个项目真正的让我感觉到了,商场如战场,而我只是其中的一个小兵,太多的战术,太多的高层之间的较量,太多的内幕了.具体这个项目的情况,我有空 ...
- 如何在C++中获得完整的类型名称(RTTI的typeid在不同平台下有不同的输出值表达,自建类改进了RTTI丢失的信息)
Wrote by mutouyun. (http://darkc.at/cxx-get-the-name-of-the-given-type/) 地球人都知道C++里有一个typeid操作符可以用 ...
随机推荐
- 利用 SASS 简化 `nth-child` 样式的生成
考察如下的 HTML 片段,通过 CSS 的 nth-child() 伪选择器实现列表的颜色循环,比如每三个一次循环. <ul> <li>1</li> <li ...
- react16 路由按需加载、路由权限配置
1. 路由按需加载: 不做按需加载,代码全部打包在bundle.js 文件里,首屏渲染很慢,项目文件较多,会出现1分钟加载的可能性. import React, { Component } from ...
- 【TencentOS tiny】又有一个操作系统开源
新闻 2019年9月18日,腾讯宣布将开源 自主研发的轻量级物联网实时操作系统TencentOS tiny.相比市场上其它系统,腾讯TencentOS tiny在资源占用.设备成本.功耗管理以及安全稳 ...
- JNDI-Injection-Exploit
介绍 最近把自己之前写的JNDI注入利用工具改了一下push到了github,地址:https://github.com/welk1n/JNDI-Injection-Exploit,启动后这个工具开启 ...
- Flannel的VXLAN模式工作原理
跨主机通信的一个解决方案是Flannel,由CoreOS推出,最早支持的是UDP模式,但是因为性能太差被淘汰了, 过时的UDP模式 相比两台宿主机直接通信,多出了flanneld的处理过程,发出IP包 ...
- django安装以及配置
一.django的安装和启动 1.安装 pip3 install django==1.11.22 目前来讲1.11.22版本比较稳定 2.django的创建 命令行:cmd先去到django创建目录, ...
- JAVA保留小数点位数
/** * java 如何保留指定位数的小数 * @author Administrator * */ public class Test04 { public static void main(St ...
- 用JavaScript制作banner轮播图
JavaScript_banner轮播图 让我们一起来学习一下用js怎么实现banner轮播图呢? 直接看代码: <!DOCTYPE html> <html> <head ...
- 百万年薪python之路 -- 内置函数二 -- 最常用的内置函数
1.内置函数 1.1 匿名函数 匿名函数,顾名思义就是没有名字的函数(其实是有名字的,就叫lambda),那么什么函数没有名字呢?这个就是我们以后面试或者工作中经常用匿名函数 lambda,也叫一句话 ...
- 基准测试了 ArrayList 和 LinkedList ,发现我们一直用 ArrayList 也是没什么问题的
ArrayList 应该是 Java 中最常用的集合类型了,以至于我们说到集合就会自然而然的想到 ArrayList.很多同学都没有用过除了 ArrayList 之外的其他集合,甚至于都已经忘了除了 ...