发表于 2015-6-30 07:11:12

SQL Server树型结构数据处理的存储过程

  我们在平常的系统开发中常常会遇到像无限级分类这样的树型结构数据,现提供一个可用的数据库存储过程,可以完成树型结构数据的排序。
  环境:windows7+Sql Server 2008
  说明:下面代码已经转换成Sql server2000的脚本,处理效果如下,看sortname字段结果,代码经过测试。

  创建树型表




CREATE TABLE .(
    IDENTITY(1,1) NOT NULL,
    NULL,
    (500) NULL,
CONSTRAINT PRIMARY KEY CLUSTERED
(
    ASC
) ON
) ON
GO
  插入测试数据




INSERT . (, , ) VALUES (1, 0, CONVERT(TEXT, N'A'))
INSERT . (, , ) VALUES (2, 0, CONVERT(TEXT, N'B'))
INSERT . (, , ) VALUES (3, 1, CONVERT(TEXT, N'AA'))
INSERT . (, , ) VALUES (4, 3, CONVERT(TEXT, N'AAA'))
INSERT . (, , ) VALUES (5, 2, CONVERT(TEXT, N'BB'))
INSERT . (, , ) VALUES (6, 1, CONVERT(TEXT, N'AA2'))
INSERT . (, , ) VALUES (7, 1, CONVERT(TEXT, N'AA3'))
INSERT . (, , ) VALUES (8, 3, CONVERT(TEXT, N'AAA2'))
INSERT . (, , ) VALUES (9, 4, CONVERT(TEXT, N'AAA3'))
INSERT . (, , ) VALUES (10, 2, CONVERT(TEXT, N'BB2'))
  创建存储过程,表中的level为级别深度,通过生成的临时表与分类表关联显示结果。




CREATE PROCEDURE .
AS
BEGIN
    --创建临时表
    create table #tmp_table (id int, int)
    declare @LevelValue int   
    set @LevelValue=0   
    insert #tmp_table select 0,@LevelValue
    --将数据写入到临时表
    while @@rowcount>0   
    begin   
      set @LevelValue=@LevelValue+1   
      insert #tmp_table select a.category_id,@LevelValue   
      from categories as a,#tmp_table as b   
      where a.parent_id=b. and b.=@LevelValue-1   
    end   
    --select * from #tmp_table
    select a.category_id,a.parent_id,a.category_name,b.,   
      case   
            when a.parent_id=0 then a.category_name else replicate('-',b.)+a.category_name   
    end as sortname   
    from categories as a join #tmp_table as b on a.category_id=b.id   
    order by sortname
    return
END
  
页: [1]
查看完整版本: SQL Server树型结构数据处理的存储过程