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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |