以表名为参数的存储过程

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/archive/2012/03/26/2417483.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值