Sql [hierarchyid]类型如何动态插入层级数据
2016-02-27 13:58
621 查看
[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) =@mOrgNode ; 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
![](http://images2015.cnblogs.com/blog/746906/201602/746906-20160227135401990-531144961.jpg)
相关文章推荐
- MySQL 加锁处理分析(转)
- csdn mysql 知识库,不错
- 怎么查询数据库中第30到40条记录呢? 通过ID,查询当前第30-40条记录 注意,ID不是顺序的
- 【sql入门】根据要求绘制E/R图,创建数据库(1)绘制E/R图
- centos7 yum安装 mariadb
- 数据库的Join操作
- Redis同步配置
- windows redis 学习指南
- Redis安装
- oracle访问数据
- redis体系结构
- mysql多版本并发控制
- mysql中间件研究(Atlas,cobar,TDDL)
- mysql变量使用总结
- sql查询重复记录
- 编译安装mysql ERROR: 1 Can't create/write to file '/tmp/#sql_86b_0.MYI'
- 在sql中用dataadd添加时间
- 【小镇的技术天梯】MySQL 查询缓存
- PL/SQL之变量的作用范围
- Mysql一主多从和读写分离配置简记