(原创)基于关系数据库系统链式存储的树型结构数据,求某结点下的子树所有结点算法(t-sql语言实现)
2006-01-14 20:26
1196 查看
(原创)基于关系数据库系统链式存储的树型结构数据,求某结点下的子树所有结点算法(t-sql语言实现)
CREATE FUNCTION f_subtree(@dpcode varchar(9)) /*树型结构数据,求某结点下的的子树所有结点的自定义函数*/
RETURNS @new table([dpcode] [varchar] (9) , --结点编码
[dpname] [varchar] (20) , --结点名称
[dpcode_p] [varchar] (9) --此结点的父结点编码
) AS
BEGIN
declare @temp table([dpcode] [varchar] (9) , --结点编码
[dpname] [varchar] (20) , --结点名称
[dpcode_p] [varchar] (9) --此结点的父结点编码
) --数据临时存放表
declare @t table([dpcode] [varchar] (9) , --结点编码
[dpname] [varchar] (20) , --结点名称
[dpcode_p] [varchar] (9) --此结点的父结点编码
) --中间临时表
declare @tt table([dpcode] [varchar] (9) , --结点编码
[dpname] [varchar] (20) , --结点名称
[dpcode_p] [varchar] (9) --此结点的父结点编码
) --中间交换临时表
delete @temp
delete @t
delete @tt
delete @new
insert into @temp select * from dpet
insert into @t select * from @temp where dpcode_p=@dpcode
insert into @new select * from @t --结果临时表
while (exists(select * from @t where dpcode in (select dpcode_p from @temp)))
--当某层的结点全为叶子时,才停止循环
begin
insert into @tt select * from @t --中间交换临时表
delete @t
insert into @t select * from @temp where dpcode_p in
(select dpcode from @tt)
delete @tt
insert into @new select * from @t
end
insert into @new select * from @temp where dpcode=@dpcode
return
END
---------------------------------------------------(以下为存储过程实现)
CREATE TABLE dpet ( --树型结构数据的数据存放表结构
[dpcode] [varchar] (9) , --结点编码
[dpname] [varchar] (20) , --结点名称
[dpcode_p] [varchar] (9) --此结点的父结点编码
) ON [PRIMARY]
/*ms sql 2000调试通过,表temp,t,new,tt 结构与表dpet一致*/
CREATE PROCEDURE desc_dept(@dpcode varchar(9)) AS
--树型结构数据,求某结点下的的子树所有结点
truncate table temp
truncate table t
truncate table tt
truncate table new
insert into temp select * from dpet --数据临时存放表
insert into t select * from temp where dpcode_p=@dpcode --中间临时表
insert into new select * from t --结果临时表
while (exists(select * from t where dpcode in (select dpcode_p from temp)))
--当某层的结点全为叶子时,才停止循环
begin
insert into tt select * from t --中间交换临时表
truncate table t
insert into t select * from temp where dpcode_p in
(select dpcode from tt)
truncate table tt
insert into new select * from t
end
insert into new select * from temp where dpcode=@dpcode
GO
CREATE FUNCTION f_subtree(@dpcode varchar(9)) /*树型结构数据,求某结点下的的子树所有结点的自定义函数*/
RETURNS @new table([dpcode] [varchar] (9) , --结点编码
[dpname] [varchar] (20) , --结点名称
[dpcode_p] [varchar] (9) --此结点的父结点编码
) AS
BEGIN
declare @temp table([dpcode] [varchar] (9) , --结点编码
[dpname] [varchar] (20) , --结点名称
[dpcode_p] [varchar] (9) --此结点的父结点编码
) --数据临时存放表
declare @t table([dpcode] [varchar] (9) , --结点编码
[dpname] [varchar] (20) , --结点名称
[dpcode_p] [varchar] (9) --此结点的父结点编码
) --中间临时表
declare @tt table([dpcode] [varchar] (9) , --结点编码
[dpname] [varchar] (20) , --结点名称
[dpcode_p] [varchar] (9) --此结点的父结点编码
) --中间交换临时表
delete @temp
delete @t
delete @tt
delete @new
insert into @temp select * from dpet
insert into @t select * from @temp where dpcode_p=@dpcode
insert into @new select * from @t --结果临时表
while (exists(select * from @t where dpcode in (select dpcode_p from @temp)))
--当某层的结点全为叶子时,才停止循环
begin
insert into @tt select * from @t --中间交换临时表
delete @t
insert into @t select * from @temp where dpcode_p in
(select dpcode from @tt)
delete @tt
insert into @new select * from @t
end
insert into @new select * from @temp where dpcode=@dpcode
return
END
---------------------------------------------------(以下为存储过程实现)
CREATE TABLE dpet ( --树型结构数据的数据存放表结构
[dpcode] [varchar] (9) , --结点编码
[dpname] [varchar] (20) , --结点名称
[dpcode_p] [varchar] (9) --此结点的父结点编码
) ON [PRIMARY]
/*ms sql 2000调试通过,表temp,t,new,tt 结构与表dpet一致*/
CREATE PROCEDURE desc_dept(@dpcode varchar(9)) AS
--树型结构数据,求某结点下的的子树所有结点
truncate table temp
truncate table t
truncate table tt
truncate table new
insert into temp select * from dpet --数据临时存放表
insert into t select * from temp where dpcode_p=@dpcode --中间临时表
insert into new select * from t --结果临时表
while (exists(select * from t where dpcode in (select dpcode_p from temp)))
--当某层的结点全为叶子时,才停止循环
begin
insert into tt select * from t --中间交换临时表
truncate table t
insert into t select * from temp where dpcode_p in
(select dpcode from tt)
truncate table tt
insert into new select * from t
end
insert into new select * from temp where dpcode=@dpcode
GO
相关文章推荐
- 基于关系数据库系统链式存储的树型结构数据,求某结点下的子树所有结点算法(t-sql语言实现)
- 基于树型结构数据的关系数据库存储与网页显示的研究 推荐
- 【数据结构作业二】写出单链表结点的结构体类型定义及查找、插入、删除算法,并以单链表作存储结构,实现有序表的合并
- 树型结构数据在关系数据库中用链式存储相关查询实现
- 本文是笔者根据数据库编程经验,利用C++语言的模板、继承、授权、多态等面向对象特性,借鉴命令模式,实现了对象在关系数据中的存储,降低应用系统与数据库之间的耦合,提高开发效率。
- 树型结构数据在数据库基本表中的存储及维护
- 树型结构数据在数据库基本表中的存储及维护
- 基于数据字典的通用查询系统(二)数据库组成结构的分析
- 数据结构与算 5:C++ 顺序/链式存储,栈 模板类实现,编译模板类问题解决
- 再回首,数据结构——字符串与数组的常见操作(链式存储,包含朴素匹配算法等)
- 数据结构之自建算法库——二叉树的链式存储及基本运算
- (原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 决策树分析算法)
- 数据结构——交换二叉树中所有结点的左右子树(所有结点换位置)
- 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。
- 数据结构与算法——线性表链式存储(单循环链表)
- 树型结构数据在数据库基本表中的存储及维护
- 数据结构——算法之(012)( linux C 所有字符串操作函数实现)
- 使用存储过程实现进销存系统中的先进先出算法(1)――数据库与存储过程设计
- (原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 神经网络分析算法原理篇)
- JSON复杂数据处理之Json树形结构数据转Java对象并存储到数据库的实现