?? 8.2.2 樹形數據深度排序處理示例(遞歸法).sql
字號:
--測試數據
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','招遠市'
UNION ALL SELECT '003','001','青島市'
UNION ALL SELECT '005',NULL ,'四會市'
UNION ALL SELECT '006','005','清遠市'
UNION ALL SELECT '007','006','小分市'
GO
--廣度搜索排序函數
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 --如果遞歸層數未超過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 tb a,f_Sort(DEFAULT,DEFAULT) b
WHERE a.ID=b.ID
ORDER BY b.sort
/*--結果
ID PID Name
------ --------- ----------
001 NULL 山東省
002 001 煙臺市
004 002 招遠市
003 001 青島市
005 NULL 四會市
006 005 清遠市
007 006 小分市
--*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -