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的更多相关文章

  1. 我是如何在SQLServer中处理每天四亿三千万记录的

    首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...

  2. 【转】我是如何在SQLServer中处理每天四亿三千万记录的

    原文转自:http://blog.jobbole.com/80395/ 首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文 ...

  3. 如何在SQLServer中处理每天四亿三千万记录

    首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...

  4. (转)我是如何在SQLServer中处理每天四亿三千万记录的

    首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...

  5. (转)我是如何在SQLServer中处理每天四亿三千万记录的

    首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...

  6. 我是如何在SQLServer中处理每天四亿三千万记录的(转)

    出处:http://www.cnblogs.com/marvin/p/HowCanIHandleBigDataBySQLServer.html 首先声明,我只是个程序员,不是专业的DBA,以下这篇文章 ...

  7. 如何在SQLServer中处理每天四亿三千万记录的(数据库大数据处理)

    首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...

  8. 如何在SQLServer中处理每天四亿三千万记录的

    项目背景 这是给某数据中心做的一个项目,项目难度之大令人发指,这个项目真正的让我感觉到了,商场如战场,而我只是其中的一个小兵,太多的战术,太多的高层之间的较量,太多的内幕了.具体这个项目的情况,我有空 ...

  9. 如何在C++中获得完整的类型名称(RTTI的typeid在不同平台下有不同的输出值表达,自建类改进了RTTI丢失的信息)

    Wrote by mutouyun. (http://darkc.at/cxx-get-the-name-of-the-given-type/)   地球人都知道C++里有一个typeid操作符可以用 ...

随机推荐

  1. Python多任务之进程

    Process多进程 进程的概念 程序是没有运行的代码,静态的: 进程是运行起来的程序,进程是一个程序运行起来之后和资源的总称: 程序只有一个,但同一份程序可以有多个进程:例如,电脑上多开QQ: 程序 ...

  2. 报错fatal: refusing to merge unrelated histories

    提交到远程仓库的时候报错如下 是因为远程仓库有东西更新,但本地仓库没有更新造成提交失败 需要先把远程仓库给拉取下来,执行命令git pull origin master,又报错了如下 是因为两个仓库提 ...

  3. 微信小程序与用户交互

    微信小程序与用户交互 一.显示消息提示框 wx.showToast({属性名:属性值}) 自定义一个提示框,时间到了会自动关闭 wx.showToast({ title:"成功", ...

  4. Java SPI、servlet3.0与@HandlesTypes源码分析

    关于Java SPI与servlet3.0的应用,这里说的很精炼,链接地址如下. https://blog.csdn.net/pingnanlee/article/details/80940993 以 ...

  5. Spring Cloud Alibaba(二) 配置中心多项目、多配置文件、分目录实现

    介绍 之前Spring Cloud Config基础篇这篇文章介绍了Spring Cloud Config 配置中心基础的实现,今天继续聊下Spring Cloud Config 并结合nacos做服 ...

  6. libevent::实现的低级 socket

    LibEvent 实现的低级 ROT13 例子 #include <cstdio> #include <netinet/in.h> #include <sys/socke ...

  7. SpringBoot之ConfigurationProperties 源码解读

    前言 ConfigurationProperties 是SpringBoot引入的一个和外部配置文件相关的注解类.它可以帮助我们更好的使用外置的配置文件属性. 源码解析 属性注入到Java类 @Tar ...

  8. 《全栈性能测试修炼宝典JMeter实战》学习记录

    说明:原书中jmeter版本为2.x,我的笔记中截图为5.x

  9. JAVA动态代理 你真的完全了解Java动态代理吗?

    网上讲JAVA动态代理,说的天花乱坠,发现一篇文章写的通俗易懂,特意转载过来 原文地址:https://www.jianshu.com/p/95970b089360 动态代理看起来好像是个什么高大上的 ...

  10. linux 下ln命令--笔记

    linux 下ln命令 ln命令用来为文件创建连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接.如果要创建符号连接必须使用"-s"选项.注意:符号链接文件不是一个独立 ...