From:http://www.cnblogs.com/smailxiaobai/archive/2012/01/13/2321850.html
--建立一个数据表 这可以是你的一个物理表
declare @temp table( ID varchar(20), ParentID varchar(20), Name nvarchar(100)) insert into @temp values('A','','分类A') insert into @temp values('B','','分类B') insert into @temp values('C','','分类C') insert into @temp values('D','','分类D') insert into @temp values('A1','A','分类A1') insert into @temp values('A2','A','分类A2') insert into @temp values('A11','A1','分类A11') insert into @temp values('A12','A1','分类A12') select * from @temp --查询"分类A"下面的所有数据 declare @$result table( ID varchar(20), ParentID varchar(20), Name nvarchar(100), myLevel int) declare @Level int set @Level = 0 insert into @$result select *,@Level from @temp where ID='A' while(@@rowcount>0) begin set @Level = @Level + 1 insert into @$result select a.*,@Level from @temp a,@$result b where a.ParentID = b.ID and myLevel = @Level-1 end select * from @$result
关键就是设一个标志Level进行轮询查找出想要的数据。
查询分类表字段修改成如下: cataid,catatitle,parentid,orderid DECLARE @ProductCenterCatalogID int SET @ProductCenterCatalogID=2; WITH ACTE(cataid,catatitle,orderid,parentid) AS ( SELECT cataid,catatitle,orderid,parentid FROM cata WHERE cataid=@ProductCenterCatalogID UNION ALL SELECT TA.cataid,TA.catatitle,TA.orderid,TA.parentid FROM cata TA INNER JOIN ACTE TB ON TA.parentid=TB.cataid ) SELECT cataid,catatitle,orderid,parentid FROM ACTE order by parentid,orderid