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]类型如何动态插入层级数据的主要内容,如果未能解决你的问题,请参考以下文章
TSql HierarchyID 数据类型用法(sqlserver2008以上有此数据类型)
使用CLR函数在Visual Studio 2019中将Hierarchyid转换为字符串