最近項目中要遞歸樹形,案例如下: 測試數據: CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10)) INSERT tb SELECT'001',NULL ,'山東省' UNION ALL SELECT'002','001','煙臺市' U
最近項目中要遞歸樹形,案例如下:
測試數據:
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','小分市'
自定義函數:
--查詢指定節點及其所有子節點的函數 CREATE FUNCTION GetALLLevle (@ID char(3)) RETURNS @t_Level TABLE(ID char(3),Level int) AS BEGIN DECLARE @Level int SET @Level=5 INSERT @t_Level SELECT @ID,@Level WHILE @@ROWCOUNT>0 BEGIN SET @Level=@Level+1 INSERT @t_Level SELECT a.ID,@Level FROM tb a,@t_Level b WHERE a.PID=b.ID AND b.Level=@Level-1 END RETURN END
函數調用:
--調用函數查詢002及其所有子節點 SELECT a.*FROM tb a,f_Cid('002') b WHERE a.ID=b.ID