zoukankan      html  css  js  c++  java
  • SQL Server树型结构数据处理的存储过程

    我们在平常的系统开发中常常会遇到像无限级分类这样的树型结构数据,现提供一个可用的数据库存储过程,可以完成树型结构数据的排序。

    环境:windows7+Sql Server 2008

    说明:下面代码已经转换成Sql server2000的脚本,处理效果如下,看sortname字段结果,代码经过测试。

    创建树型表

    CREATE TABLE [dbo].[categories](
    [category_id] [int] IDENTITY(1,1) NOT NULL,
    [parent_id] [int] NULL,
    [category_name] [varchar](500) NULL,
    CONSTRAINT [PK_categories] PRIMARY KEY CLUSTERED
    (
    [category_id] ASC
    )
    ON [PRIMARY]
    )
    ON [PRIMARY]
    GO

    插入测试数据

    INSERT [dbo].[categories] ([category_id], [parent_id], [category_name]) VALUES (1, 0, CONVERT(TEXT, N'A'))
    INSERT [dbo].[categories] ([category_id], [parent_id], [category_name]) VALUES (2, 0, CONVERT(TEXT, N'B'))
    INSERT [dbo].[categories] ([category_id], [parent_id], [category_name]) VALUES (3, 1, CONVERT(TEXT, N'AA'))
    INSERT [dbo].[categories] ([category_id], [parent_id], [category_name]) VALUES (4, 3, CONVERT(TEXT, N'AAA'))
    INSERT [dbo].[categories] ([category_id], [parent_id], [category_name]) VALUES (5, 2, CONVERT(TEXT, N'BB'))
    INSERT [dbo].[categories] ([category_id], [parent_id], [category_name]) VALUES (6, 1, CONVERT(TEXT, N'AA2'))
    INSERT [dbo].[categories] ([category_id], [parent_id], [category_name]) VALUES (7, 1, CONVERT(TEXT, N'AA3'))
    INSERT [dbo].[categories] ([category_id], [parent_id], [category_name]) VALUES (8, 3, CONVERT(TEXT, N'AAA2'))
    INSERT [dbo].[categories] ([category_id], [parent_id], [category_name]) VALUES (9, 4, CONVERT(TEXT, N'AAA3'))
    INSERT [dbo].[categories] ([category_id], [parent_id], [category_name]) VALUES (10, 2, CONVERT(TEXT, N'BB2'))

    创建存储过程,表中的level为级别深度,通过生成的临时表与分类表关联显示结果。

    CREATE PROCEDURE [dbo].[Get_TreeData]
    AS
    BEGIN
    --创建临时表
    create table #tmp_table (id int,[level] 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.[id] and b.[level]=@LevelValue-1
    end
    --select * from #tmp_table
    select a.category_id,a.parent_id,a.category_name,b.[level],
    case
    when a.parent_id=0 then a.category_name else replicate('-',b.[level])+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


    作者:Neo.Yan
    出处:http://www.cnblogs.com/Nick4/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    欢迎大家访问我的网站-RedGlove.NET

    软件团队管理QQ交流群:124388576,欢迎对软件团队管理有兴趣的朋友加入

  • 相关阅读:
    精通javascript、javascript语言精粹读书笔记
    javascript语言精粹。3、对象;4、函数;深入原型链,对象的原理!
    权限管理
    javascript碎碎念(面向对象备忘)
    几个JavaScript面试题
    JavaScript类属性的定义方法和区别
    j
    Java调用SQL存储过程 输入输出参数(转)
    Java中文乱码解决
    js中eval详解
  • 原文地址:https://www.cnblogs.com/nick4/p/1655741.html
Copyright © 2011-2022 走看看