代码之家  ›  专栏  ›  技术社区  ›  MS204

从存储在表中的查询中获取结果到其自己的结果集中?

  •  0
  • MS204  · 技术社区  · 7 年前

    是否可以从存储在表中的查询中获得结果,而不必单独运行它们?

    TableWithQueries
    
    Query                                                ID         Name
    -------------------------------------------------------------------------------
    Select Count(*) from somewhere Where someID = 18     01         Server01 Logins
    Select Count(*) from somewhere Where someID = 13     02         Server08 Logins
    Select Count(*) from somewhere Where someID = 49     03         Server23 Logins
    

    我想把这些查询的结果放到其他表中,这样我就可以将它们与其他列连接起来。类似这样:

    QueryResults      Name                ID      SomeOtherInfo
    ----------------------------------------------------------------
    48                Server01Logins      01      k393838dd
    51                Server08Logins      02      b39848dff
    99                Server23Logins      03      k394890dd
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   AB_87    7 年前

    我相信会有比这更干净的代码,但这应该可以工作。 #FinalResult )然后可以将其连接到另一个表(基于 ID )以获得最终结果。

    注: AdventureWorksDW2012 形成我的 SELECT COUNT 查询。

         CREATE TABLE #test
        (
            Query VARCHAR(MAX) ,
            ID INT ,
            Name VARCHAR(100)
        );
    
    INSERT INTO #test (   Query ,
                          ID ,
                          Name
                      )
    VALUES (   'select count(*)  FROM dbo.DimAccount' , -- Query - varchar(max)
               1 ,                                      -- ID - int
               'Server01 Logins'                        -- Name - varchar(100)
           ) ,
        (   'select count(*)  FROM dbo.DimCustomer' , -- Query - varchar(max)
            2 ,                                       -- ID - int
            'Server08 Logins'                         -- Name - varchar(100)
        ) ,
        (   'select count(*)  FROM dbo.DimEmployee' , -- Query - varchar(max)
            3 ,                                       -- ID - int
            'Server09 Logins'                         -- Name - varchar(100)
        );
    
    
    
    CREATE TABLE #Result
        (
            QueryResult INT --(assuming its only count)
            --,ID INT 
        );
    
    CREATE TABLE #FinalResult
        (
            QueryResult INT --(assuming its only count)
            ,ID INT 
        );
    
    DECLARE @Sql NVARCHAR(MAX);
    DECLARE @ID INT 
    DECLARE @Count INT
    DECLARE ResultCursor CURSOR LOCAL FAST_FORWARD FOR
        SELECT Query, ID
        FROM   #test;
    
    
    OPEN ResultCursor;
    
    FETCH NEXT FROM ResultCursor
    INTO @Sql, @id;
    
    WHILE ( @@FETCH_STATUS = 0 )
        BEGIN
    
    
    
            INSERT INTO #Result 
            EXEC sp_executesql @Sql  
            FETCH NEXT FROM ResultCursor
            INTO @Sql, @Id;
    
            INSERT INTO #FinalResult (   QueryResult ,
                                         ID
                                     )
            SELECT QueryResult, @id FROM #Result
    
            DELETE FROM #result
    
        END;
    
    CLOSE ResultCursor;
    DEALLOCATE ResultCursor;
    
    SELECT *
    FROM   #FinalResult;
    
    DROP TABLE #test;
    DROP TABLE #Result;
    DROP TABLE #FinalResult;
    
        2
  •  0
  •   Spencer MacBeth    7 年前

    PREPARE EXECUTE 文档,这听起来像是你可能要找的。

    https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html