zoukankan      html  css  js  c++  java
  • 如何在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') 

    喜欢本文章的朋友,欢迎关注公众号【程序员在职场】支持一下作者哦。

     

  • 相关阅读:
    ScrollView 字典
    centos 6.x 安装redis
    Linux 添加epel源
    Linux 关于解压
    Linux 删除文件夹
    Linux sz rz
    让div 实现 input效果
    解决js浮点数计算bug
    键盘绑定事件和焦点处理
    npm的镜像替换成淘宝
  • 原文地址:https://www.cnblogs.com/w821759016/p/11843546.html
Copyright © 2011-2022 走看看