CREATE PROCEDURE pro_RecursionChildList ( @PID int,--传入父级ID @TableName varchar(50),--传入查询表名称 @IsShowParent bit --是否插入父级 )AS DECLARE @INDEX INT CREATE TABLE #T (ID VARCHAR(10),Name VARCHAR(50),PARENTID VARCHAR(10),LEVEL INT) SET @INDEX=1 IF @IsShowParent=1 BEGIN EXEC('INSERT INTO #T SELECT ID,NAME,PARENTID,0 FROM '+ @TableName+' WHERE ID='+@PID) --插入当前级别 END EXEC('INSERT INTO #T SELECT ID,NAME,PARENTID, '+@INDEX+' FROM '+@TableName+' WHERE PARENTID = '+@PID)--插入PID下一级的数据 WHILE @@ROWCOUNT>0 BEGIN SET @INDEX=@INDEX+1 EXEC('INSERT INTO #T SELECT T1.ID,T1.NAME,T1.PARENTID, '+@INDEX+' FROM '+ @TableName+' T1,#T WHERE T1.PARENTID= #T.ID AND #T.LEVEL= '+@INDEX+' -1') END SELECT * FROM #T GO
经常要为每一个类似的表写一递归个函数 很麻烦,这样解决了不少问题。表结构要为ID,NAME,PARENTID。
调用结果: