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

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

     

  • 相关阅读:
    用colorWithPatternImage设置view背景色太占内存,替代方法
    快捷键
    数组里面放入随机数
    Android图像处理之Bitmap类
    android屏幕适配_
    最火的Android开源项目
    boost 编译
    QTextEdit更改单个段落/块的字体
    自定义QMenu样式
    Qimage QBuffer
  • 原文地址:https://www.cnblogs.com/w821759016/p/11843546.html
Copyright © 2011-2022 走看看