Sql [hierarchyid]类型如何动态插入层级数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sql [hierarchyid]类型如何动态插入层级数据相关的知识,希望对你有一定的参考价值。

[hierarchyid] 是个不错的数据类型,提供了很方便并且高性能的树型查询,网上找了很多资料都没有讲到如何做到动态插入这个关键点,从MSDN认真看了下资料写出了一个DEMO

CREATE TABLE  EmployeeOrg
(
   OrgNode hierarchyid PRIMARY KEY CLUSTERED,
   OrgLevel AS OrgNode.GetLevel(),
   EmployeeID int UNIQUE NOT NULL,
   EmpName varchar(20) NOT NULL,
   Title varchar(20) NULL
) ;
go

CREATE PROC AddEmp(@mgrid int, @empid int, @e_name varchar(20), @title varchar(20)) 
AS 
BEGIN
   DECLARE @mOrgNode hierarchyid, @lc hierarchyid
   SELECT @mOrgNode = OrgNode 
   FROM  EmployeeOrg 
   WHERE EmployeeID = @mgrid
   SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
   BEGIN TRANSACTION
      SELECT @lc = max(OrgNode) 
      FROM  EmployeeOrg 
      WHERE OrgNode.GetAncestor(1) [email protected] ;

      INSERT  EmployeeOrg (OrgNode, EmployeeID, EmpName, Title)
      VALUES(@mOrgNode.GetDescendant(@lc, NULL), @empid, @e_name, @title)
   COMMIT
END ;

go

--插入根
INSERT  EmployeeOrg (OrgNode, EmployeeID, EmpName, Title)
VALUES (hierarchyid::GetRoot(), 1, ‘蓝灯‘, ‘Marketing Manager‘) 
go
--随机数
declare @p1 int
select @p1=convert(int, 100000000*rand())
declare @p2 int
select @p2=convert(int, 100000000*rand())

--插入软件部门子集
EXEC AddEmp 1, @p1, ‘研发部门老大‘, ‘Marketing Specialist‘ ;
EXEC AddEmp 1, @p2, ‘测试部门老大‘, ‘Marketing Specialist‘ ;

go

select * from EmployeeOrg

  技术分享

以上是关于Sql [hierarchyid]类型如何动态插入层级数据的主要内容,如果未能解决你的问题,请参考以下文章

SQL:查找hierarchyid的最低共同祖先

TSql HierarchyID 数据类型用法(sqlserver2008以上有此数据类型)

SQL连接/合并两个hierarchyid表

使用CLR函数在Visual Studio 2019中将Hierarchyid转换为字符串

生成用于 SQL Server hierarchyId 的唯一节点 ID

sqlserver 存储过程 递归查询分组+hierarchyid重建会员关系