SQLServer实现树型结构数据查询的存储过程,类似oracle的connect by
2008-01-03 18:24
951 查看
CREATE PROCEDURE [dbo].[sp_get_tree_relation]
(@table_name nvarchar(50), @id nvarchar(50), @name nvarchar(50), @parent_id nvarchar(50), @startId nvarchar(20))
AS
declare @v_id int
declare @v_level int
declare @sql nvarchar(500)
begin
create table #temp (id nvarchar(20),name nvarchar(50),parent_id nvarchar(20))
create table #t1 (id nvarchar(20),name nvarchar(50),parent_id nvarchar(20),level int)
-- 将需要查询关系的表的数据先导入到临时表
set @sql='insert into #temp select '+@id+','+@name+','+@parent_id +' from '+@table_name
exec sp_executesql @sql
set @v_level=1
set @v_id=@startId
insert #t1 select a.id,a.name,a.parent_id,@v_level from #temp a where a.id=@v_id
while @@rowcount>0
begin
set @v_level=@v_level+1
insert #t1 select a.id,a.name,a.parent_id,@v_level
from #temp a where a.parent_id in
(select id from #t1 where level=@v_level-1)
end
select a.level,a.id,a.name,a.parent_id,b.name parent_name
from #t1 a left outer join #temp b
on a.parent_id = b.id order by a.level asc
end
--执行
如果表organize为层级关系的表,则执行存储过程得到组织关系的树型结果
sp_get_tree_relation 'orgnaize','org_id','org_name','parent_org',1
(@table_name nvarchar(50), @id nvarchar(50), @name nvarchar(50), @parent_id nvarchar(50), @startId nvarchar(20))
AS
declare @v_id int
declare @v_level int
declare @sql nvarchar(500)
begin
create table #temp (id nvarchar(20),name nvarchar(50),parent_id nvarchar(20))
create table #t1 (id nvarchar(20),name nvarchar(50),parent_id nvarchar(20),level int)
-- 将需要查询关系的表的数据先导入到临时表
set @sql='insert into #temp select '+@id+','+@name+','+@parent_id +' from '+@table_name
exec sp_executesql @sql
set @v_level=1
set @v_id=@startId
insert #t1 select a.id,a.name,a.parent_id,@v_level from #temp a where a.id=@v_id
while @@rowcount>0
begin
set @v_level=@v_level+1
insert #t1 select a.id,a.name,a.parent_id,@v_level
from #temp a where a.parent_id in
(select id from #t1 where level=@v_level-1)
end
select a.level,a.id,a.name,a.parent_id,b.name parent_name
from #t1 a left outer join #temp b
on a.parent_id = b.id order by a.level asc
end
--执行
如果表organize为层级关系的表,则执行存储过程得到组织关系的树型结果
sp_get_tree_relation 'orgnaize','org_id','org_name','parent_org',1
相关文章推荐
- MySql的sql语句中添加存储过程或者存储函数来实现Oracle中的start with ……connect by prior……递归(树形结构数据)查询
- 树型结构数据在关系数据库中用链式存储相关查询实现
- SQLServer 存储过程中不拼接SQL字符串实现多条件查询
- oracle 树型结构数据的查询
- SQLServer 存储过程中不拼接SQL字符串实现多条件查询
- SQLServer 存储过程中不拼接SQL字符串实现多条件查询
- SQLServer 存储过程中不拼接SQL字符串实现多条件查询
- 通过存储过程,查询表的相关表字段信息(sqlserver,mysql,oracle)
- 实现百万数据量毫秒级查询的存储结构
- Sql语句与存储过程查询数据的性能测试实现代码
- Oracle存储过程中拼接时间查询数据未查询到?
- 折腾Oracle问题小菜记[分页存储过程/查询所有表、视图、存储过程/查询表、视图、存储过程字段结构与参数](三)
- 关于数据库中一张表存储树型数据的查询实现
- SQLServer 存储过程中不拼接SQL字符串实现多条件查询
- 基于关系数据库系统链式存储的树型结构数据,求某结点下的子树所有结点算法(t-sql语言实现)
- 折腾Oracle问题小菜记[分页存储过程/查询所有表、视图、存储过程/查询表、视图、存储过程字段结构与参数](三)
- python 调用hive查询实现类似存储过程
- ORACLE实现存储过程返回查询结果集合的方法
- SQLServer 存储过程中不拼接SQL字符串实现多条件查询
- MySQL存储过程实例——实现查询数据表,有则更新无则插入