zoukankan      html  css  js  c++  java
  • 以表名为参数的存储过程

    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。

    调用结果:

  • 相关阅读:
    汉诺塔问题
    Java中的int类型取值范围
    unsigned 类型
    CharBuffer
    铺地砖问题(递归)
    汉诺塔简略
    Long类型的构造方法被遗弃,代替的是valueOf
    坏掉的项链
    挤牛奶
    修理牛棚
  • 原文地址:https://www.cnblogs.com/encore620/p/2417483.html
Copyright © 2011-2022 走看看