您的位置:首页 > 数据库

使用SQL2005 递归查询结合Row_Number()实现完全SQL端树排序

2009-02-05 17:40 453 查看

在实际应用中,我们经常需要用到树型结构功能,数据库结构一般如下

with RelClass

as

(

select * from CMS_Site_Class where ClassID = 1

union all

select csc.* from CMS_Site_Class as csc inner join RelClass as rc on csc.ClassID_Parent = rc.ClassID )

SELECT * from RelClass

将得到ClassID为1的根节点下的所有记录:

-- =============================================

-- Author: <kingimg>

-- Create date: <2009-2-5>

-- Description: <生成已排序的树>

-- =============================================

Create PROCEDURE [dbo].[pCMS_Site_Class__GetList]

@ClassID int

AS

BEGIN

with RelClass

as

(

select *,0 as Level,cast('0' as nvarchar(max)) as treepath from CMS_Site_Class where ClassID = @ClassID

union all

select csc.*,rc.[Level] + 1,rc.treepath + dbo.Lpad(Row_Number() over (order by csc.OrderID desc),8) as treepath from CMS_Site_Class as csc inner join RelClass as rc on csc.ClassID_Parent = rc.ClassID )

SELECT * from RelClass order by treepath

END

执行以上存储过程,最后就输出结果:


这棵树已经从上到下按树结构排好序了!程序里只要原样输出即可!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: