zoukankan      html  css  js  c++  java
  • 通用树形表查询SQL


    -- =============================================
    --
     -- Description:    获取当前表所选分类ID下的所有下级分类ID
    --
    =============================================
    ALTERPROC[dbo].[GetTreeTable]
    (
       
    @IDint=null,                --要查询的ID,查询所有输入NULL
        @TableNamevarchar(100),    --要查询的表名
        @IDNamevarchar(200),        --主字段名
        @SuperIDNamevarchar(200)    --上级字段名
    )

    AS
    BEGIN

       
    --create table #Tab (ID int, SuperID int, Lev int)

       
    --Declare @Lev int
        DECLARE@StrSQLvarchar(5000)
    --    Set @Lev=0
    --
    --
        While @Lev=0 or @@ROWCount>0
    --
        Begin
    --
            Set @Lev=@Lev+1
    --
            SET @StrSQL = 'Insert #Tab(ID, SuperID, Lev) Select '+@IDName+', '+@SuperIDName+', '+convert(varchar(10),@Lev)+' From '+@TableName+' Where ('+convert(varchar(10),@Lev)+'=1 and (('+@IDName+'='+convert(varchar(10),@ID)+') or (('+convert(varchar(10),@ID)+' is null or '+convert(varchar(10),@ID)+'='''') and '+@SuperIDName+' is null))) or ('+@SuperIDName+' in (Select ID From #Tab Where Lev='+convert(varchar(10),@Lev)+'-1)) order by '+@IDName
    --
            --print @StrSQL
    --
            EXEC (@StrSQL)
    --
        End
        SET@StrSQL='
        WITH DirectReports(
    '+@IDName+', '+@SuperIDName+',Level) AS
        (
            SELECT
    '+@IDName+', '+@SuperIDName+', 0 AS Level
            FROM
    '+@TableName+'
            WHERE (
    '+@IDName+'='+CONVERT(VARCHAR(100),ISNULL(@ID,''))+') OR ('+@SuperIDName+' IS NULL AND '+CONVERT(VARCHAR(100),ISNULL(@ID,''))+' = 0)
            UNION ALL
            SELECT e.
    '+@IDName+', e.'+@SuperIDName+', Level + 1
            FROM
    '+@TableName+' e
            INNER JOIN DirectReports d
            ON e.
    '+@SuperIDName+' = d.'+@IDName+'
        )
       
        SELECT
    '+@IDName+','+@SuperIDName+',Level
        FROM DirectReports
        ORDER BY Level
       
    '
       
    EXEC (@StrSQL)
       
    PRINT@StrSQL
       
    --select * from #Tab
        --drop table #Tab
    END


    -- exec [GetTreeTable]    1060,'T_Department','DepID','SuperDepID'

    -- exec [GetTreeTable]    NULL,'T_WLFLDY','WLFLID','SJFL'

    --SELECT * FROM T_WLFLDY

     

          

     
  • 相关阅读:
    Android websocket使用
    Android WebSocket实现即时通讯功能
    A dependency may only have one source
    Finished with error: ProcessException: Process "D:FlutterAPPflutter_appfiveandroidgradlew.bat" exited abnormally:
    Android 中指纹识别
    vue学习指南:第四篇(详细)
    vue学习指南:第二篇(详细Vue基础)
    vue学习指南:第三篇(详细)
    webpack打包js文件
    H5离线缓存(基础)学习指南
  • 原文地址:https://www.cnblogs.com/sunshch/p/2439024.html
Copyright © 2011-2022 走看看