以表名为参数的存储过程

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。

调用结果:

原文地址:https://www.cnblogs.com/encore620/p/2417483.html