• 以表名为参数的存储过程


    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。

    调用结果:

  • 相关阅读:
    一款jquery写出来的tab切换
    mouseenter 事件,固定右侧客服特效
    一款兼容pc 移动端的tab切换
    EhCache缓存
    HTML5中与页面显示相关的API
    JAVA获取客户端IP地址
    Oracle11g导出空表
    css兼容问题集合
    使用Java修改Windows注册表
    常用的SQL分页
  • 原文地址:https://www.cnblogs.com/encore620/p/2417483.html
Copyright © 2020-2023  润新知