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') 

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

     

  • 相关阅读:
    1142
    dbms_monitor开启/关闭会话跟踪
    mysql密码过期问题
    zabbix监控mysql
    12C -- ORA-65048 ORA-65048
    idea的快捷键
    IntelliJ IDEA的配置优化
    IDEA环境设置
    Java 中int、String的类型转换
    js数组去重
  • 原文地址:https://www.cnblogs.com/w821759016/p/11843546.html
Copyright © 2011-2022 走看看