是这样子吗?.
create table ProductType
(
prodTypeId int identity(1,1) primary key,
prodTypeName varchar(50),--分类名
parentId int,--父ID,第一级为0
Remark varchar(200),--描述
prodNumber int--分类里的产品数量
)
insert into ProductType values('手机',0,'手机手机手机手机手机手机',0)
insert into ProductType values('数码相机',0,'数码相机数码相机数码相机数码相机数码相机',0)
insert into ProductType values('摄像机',0,'摄像机摄像机摄像机摄像机',0)
insert into ProductType values('CPU',0,'CPUCPUCPUCPU',0)
insert into ProductType values('主板',0,'主板主板主板主板',0)
insert into ProductType values('硬盘',0,'硬盘硬盘硬盘硬盘',0)
insert into ProductType values('高清电视',0,'高清电视高清电视高清电视高清电视',0)
insert into ProductType values('MP3',0,'MP3MP3MP3MP3',0)
insert into ProductType values('MP4',0,'MP4MP4MP4MP4',0)
insert into ProductType values('耳机',0,'耳机耳机耳机耳机耳机',0)
insert into ProductType values('鼠标',0,'鼠标鼠标鼠标鼠标鼠标',0)
insert into ProductType values('内存条',0,'内存条内存条内存条内存条',0)
insert into ProductType values('显示器',0,'显示器显示器显示器显示器显示器',0)
insert into ProductType values('键盘',0,'键盘键盘键盘键盘',0)
insert into ProductType values('CPU风扇',0,'CPU风扇CPU风扇CPU风扇CPU风扇',0)
insert into ProductType values('机箱电源',0,'机箱电源机箱电源机箱电源机箱电源',0)
insert into ProductType values('U盘',0,'U盘U盘U盘U盘',0)
insert into ProductType values('移动硬盘',0,'移动硬盘移动硬盘移动硬盘移动硬盘',0)
insert into ProductType values('电脑附件',0,'电脑附件电脑附件电脑附件电脑附件',0)
insert into ProductType values('其它',0,'其它其它其它其它',0)
insert into producttype values('大哥大',1,'属性于手机类',0)
insert into producttype values('大哥大1_1',21,'属性于大哥大类',0)
insert into producttype values('大哥大1_1_1',22,'属性于大哥大1-1-1类',0)
insert into producttype values('CPU1_1',4,'属于CPU大类',0)
insert into producttype values('CPU1_1_1',24,'属于CPU1-1分类',0)
go
CREATE FUNCTION f_Sort(@ID int=0,@sort int=1)
RETURNS @t_Level TABLE(ID char(3),sort int)
AS
BEGIN
DECLARE tb CURSOR LOCAL
FOR
SELECT prodTypeId FROM ProductType
WHERE parentId=@ID
--OR(@ID IS NULL AND PID IS NULL)
OPEN TB
FETCH tb INTO @ID
WHILE @@FETCH_STATUS=0
BEGIN
INSERT @t_Level VALUES(@ID,@sort)
SET @sort=@sort+1
IF @@NESTLEVEL<32 --如果递归层数未超过32层(递归最大允许32层)
BEGIN
--递归查找当前节点的子节点
INSERT @t_Level SELECT * FROM f_Sort(@ID,@sort)
SET @sort=@sort+@@ROWCOUNT --排序号加上子节点个数
END
FETCH tb INTO @ID
END
RETURN
END
GO
SELECT a.*
FROM ProductType a,dbo.f_Sort(21,DEFAULT) b
WHERE a.prodTypeId=b.ID
ORDER BY b.sort
drop function f_Sort
drop table ProductType
--上面查的是prodTypeId为21的分类
/*
prodTypeId prodTypeName parentId Remark prodNumber
----------- --------------------- ----------- --------------------- -----------
22 大哥大1_1 21 属性于大哥大类 0
23 大哥大1_1_1 22 属性于大哥大1-1-1类 0
(所影响的行数为 2 行)
*/