SQL取得树型目录下的数据[通用存储过程]
2007-12-18 09:21
405 查看
--win 2kp, sqlserver 2000
--来自CSDN: libin_ftsafe(子陌红尘)
--生成测试数据
create table BOM(ID VARCHAR(10),ParentID VARCHAR(10),Name VARCHAR(1000))
INSERT INTO BOM select 'D0','-1','服装'
INSERT INTO BOM select 'D1','D0','上衣'
INSERT INTO BOM select 'D2','D0','裤子'
INSERT INTO BOM select 'D3','D1','中山装'
INSERT INTO BOM select 'D4','D3','圆领中山装'
go
--创建存储过程
create procedure sp_getChile
@TName nvarchar(40),
@IDName nvarchar(40),
@PIDName nvarchar(40),
@Name nvarchar(40),
@ID nvarchar(20)
as
begin
create table #T(ID VARCHAR(10),ParentID VARCHAR(10),Name VARCHAR(40),Level INT)
declare @s nvarchar(4000)
set @s = N'declare @i int set @i = 1'
set @s = @s + N'
insert into #t select '+@IDName+N','+@PIDName+N','+@Name+N',@i from '+@TName+N' where ID='''+@ID+N''''
set @s = @s + N'
while @@rowcount<>0
begin
set @i = @i + 1
insert into #t
select
a.'+@IDName+N',a.'+@PIDName+N',a.'+@Name+N',@i
from
'+@TName+N' a,#t b
where
a.'+@PIDName+N'=b.'+@IDName+N' and b.Level = @i-1
end'
exec(@s)
select ID,ParentID,Name from #T
end
go
--执行存储过程
exec sp_getChile 'BOM','ID','ParentID','Name','D1'
/*
id ParentID name
---------- -------------------- --------------------
D1 D0 上衣
D3 D1 中山装
D4 D3 圆领中山装
*/
--删除测试数据
drop procedure sp_getChile
drop table BOM
转http://www.cnweblog.com/yionline/articles/48058.html
--来自CSDN: libin_ftsafe(子陌红尘)
--生成测试数据
create table BOM(ID VARCHAR(10),ParentID VARCHAR(10),Name VARCHAR(1000))
INSERT INTO BOM select 'D0','-1','服装'
INSERT INTO BOM select 'D1','D0','上衣'
INSERT INTO BOM select 'D2','D0','裤子'
INSERT INTO BOM select 'D3','D1','中山装'
INSERT INTO BOM select 'D4','D3','圆领中山装'
go
--创建存储过程
create procedure sp_getChile
@TName nvarchar(40),
@IDName nvarchar(40),
@PIDName nvarchar(40),
@Name nvarchar(40),
@ID nvarchar(20)
as
begin
create table #T(ID VARCHAR(10),ParentID VARCHAR(10),Name VARCHAR(40),Level INT)
declare @s nvarchar(4000)
set @s = N'declare @i int set @i = 1'
set @s = @s + N'
insert into #t select '+@IDName+N','+@PIDName+N','+@Name+N',@i from '+@TName+N' where ID='''+@ID+N''''
set @s = @s + N'
while @@rowcount<>0
begin
set @i = @i + 1
insert into #t
select
a.'+@IDName+N',a.'+@PIDName+N',a.'+@Name+N',@i
from
'+@TName+N' a,#t b
where
a.'+@PIDName+N'=b.'+@IDName+N' and b.Level = @i-1
end'
exec(@s)
select ID,ParentID,Name from #T
end
go
--执行存储过程
exec sp_getChile 'BOM','ID','ParentID','Name','D1'
/*
id ParentID name
---------- -------------------- --------------------
D1 D0 上衣
D3 D1 中山装
D4 D3 圆领中山装
*/
--删除测试数据
drop procedure sp_getChile
drop table BOM
转http://www.cnweblog.com/yionline/articles/48058.html
相关文章推荐
- SQL取得树型目录下的数据[通用存储过程]
- sql 优化之:实现小数据量和海量数据的通用分页显示存储过程(系列四)
- 简单通用的数据 置顶、上移、下移 sql 存储过程
- SQL脚本--(通用存储过程)如何删除表中某个字段重复的数据
- sql 优化之:实现小数据量和海量数据的通用分页显示存储过程(系列四)
- sql 优化之:实现小数据量和海量数据的通用分页显示存储过程(系列四)
- GridView分页数据处理,在sql存储过程中取得每页数据
- 实现小数据量和海量数据的通用分页显示存储过程
- 数据库表生成实体 包括注释 并生成mybatis Mapper映射 加入注释 通用SQL查询映射
- 一个通用的数据分页的存储过程
- SQL 通用数据类型
- 将表数据生成SQL脚本的存储过程
- MS SQL Server将数据导出Insert语句的存储过程
- sql根据一条数据ID取得上一条和下一条的问题
- SQL Server 2005 导出包含(insert into)数据的SQL脚本 (使用存储过程)
- 最通用的ibatis.Net使用sql server存储过程返回分页数据的详细例子
- 将表数据生成SQL脚本的存储过程
- sql生成(c#调用存储过程返回数据表)代码的存储过程
- 树型结构数据的客户部门SQL显示语句(纯sql语句)
- 实现小数据量和海量数据的通用分页显示存储过程