加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 12:31:58 所属栏目:MsSql教程 来源:网络整理
导读:我们在平常的系统开发中常常会遇到像无限级分类这样的树型结构数据,现提供一个可用的数据库存储过程,可以完成树型结构数据的排序。 环境:windows7+Sql Server 2008 说明:下面代码已经转换成Sql server2000的脚本,处理效果如下,看sortname字段结果,代码

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

环境: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,CONVERT(TEXT,N'A'))
INSERT [dbo].[categories] ([category_id],[category_name]) VALUES (2,N'B'))
INSERT [dbo].[categories] ([category_id],[category_name]) VALUES (3,1,N'AA'))
INSERT [dbo].[categories] ([category_id],[category_name]) VALUES (4,3,N'AAA'))
INSERT [dbo].[categories] ([category_id],[category_name]) VALUES (5,2,N'BB'))
INSERT [dbo].[categories] ([category_id],[category_name]) VALUES (6,N'AA2'))
INSERT [dbo].[categories] ([category_id],[category_name]) VALUES (7,N'AA3'))
INSERT [dbo].[categories] ([category_id],[category_name]) VALUES (8,N'AAA2'))
INSERT [dbo].[categories] ([category_id],[category_name]) VALUES (9,4,N'AAA3'))
INSERT [dbo].[categories] ([category_id],[category_name]) VALUES (10,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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读