如何在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操作符可以用 ...
随机推荐
- wildfly(JBoss AS)应用服务器快速入门
什么是wildfly JBoss AS 从8版本起名为wildfly.Wildfly是一个开源的基于JavaEE的轻量级应用服务器.可以在任何商业应用中免费使用. WildFly是一个灵活的.轻量的. ...
- mysql启动错误1067进程意外终止的解决方法
一.环境介绍 1.mysql主从复制中的从服务器 2.Windows Server 2008 R2 Enterprise系统 64位操作系统 3.MySQL数据库版本为5.6.34 二.报错详情 从服 ...
- JAVA保留小数点位数
/** * java 如何保留指定位数的小数 * @author Administrator * */ public class Test04 { public static void main(St ...
- pdfminer API介绍:pdf网页爬虫
安装 pip install pdfminer 爬取数据是数据分析项目的第一个阶段,有的加密成pdf格式的文件,下载后需要解析,使用pdfminer工具. 先介绍一下什么是pdfminer 下面是官方 ...
- webpack——简单入门
1.介绍 Webpack 是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按需加载的模块进行代码分隔,等到实际需要的时候再异步 ...
- Mqtt-Client
客户端选择:paho MQTT client. 使用vs2013编译成库 需要用到paho-mqtt3a库和paho-mqtt3c库.
- Joomla3.4.6 RCE漏洞深度分析
笔者<Qftm>原文发布:https://www.freebuf.com/vuls/216512.html *严正声明:本文仅限于技术讨论与分享,严禁用于非法途径 0×00 背景 10月9 ...
- H5 video踩坑实录
前段时间公司APP做了一个APP论坛会议,嵌入了h5播放器.我以为很简单,没想到,这正是我踩进泥潭的开始... (想要吸取经验的小伙伴可以慢慢往下看,想要解决方案的直接看最后!) 一.一开始我以为直接 ...
- Redis(十四)Redis 在Java Web 中的应用
在传统的 Java Web 项目中,使用数据库进行存储数据,但是有一些致命的弊端,这些弊端主要来自于性能方面. 由于数据库持久化数据主要是面向磁盘,而磁盘的读/写比较慢,在一般管理系统中,由于不存在高 ...
- Spring MVC(1)Spring MVC的初始化和流程以及SSM的实现
一.Spring MVC概述 1.Spring MVC 的架构 对于持久层而言,随着软件的发展,迁移数据库的可能性很小,所以在大部分情况下都用不到Hibernate的HQL来满足迁移数据库的要求.与此 ...