?? 8.2.2 樹形數(shù)據(jù)深度排序處理示例(遞歸法).sql
字號:
--測試數(shù)據(jù)
CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10))
INSERT tb SELECT '001',NULL ,'山東省'
UNION ALL SELECT '002','001','煙臺市'
UNION ALL SELECT '004','002','招遠(yuǎn)市'
UNION ALL SELECT '003','001','青島市'
UNION ALL SELECT '005',NULL ,'四會市'
UNION ALL SELECT '006','005','清遠(yuǎn)市'
UNION ALL SELECT '007','006','小分市'
GO
--廣度搜索排序函數(shù)
CREATE FUNCTION f_Sort(@ID char(3)=NULL,@sort int=1)
RETURNS @t_Level TABLE(ID char(3),sort int)
AS
BEGIN
DECLARE tb CURSOR LOCAL
FOR
SELECT ID FROM tb
WHERE PID=@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 --如果遞歸層數(shù)未超過32層(遞歸最大允許32層)
BEGIN
--遞歸查找當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)
INSERT @t_Level SELECT * FROM f_Sort(@ID,@sort)
SET @sort=@sort+@@ROWCOUNT --排序號加上子節(jié)點(diǎn)個數(shù)
END
FETCH tb INTO @ID
END
RETURN
END
GO
--顯示結(jié)果
SELECT a.*
FROM tb a,f_Sort(DEFAULT,DEFAULT) b
WHERE a.ID=b.ID
ORDER BY b.sort
/*--結(jié)果
ID PID Name
------ --------- ----------
001 NULL 山東省
002 001 煙臺市
004 002 招遠(yuǎn)市
003 001 青島市
005 NULL 四會市
006 005 清遠(yuǎn)市
007 006 小分市
--*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -