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

get results from queries stored in a table into its own result set?

我有一个 table,它有一个包含 SQL 查询的 varchar(max) 列。这些查询是根据在其他 table 中找到的值动态生成的。最终,我需要获取这些查询的结果(只是简单的 count(*) 语句)并将它们与来自其他 tables.

的信息结合起来

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

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

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

QueryResults      Name                ID      SomeOtherInfo
----------------------------------------------------------------
48                Server01Logins      01      k393838dd
51                Server08Logins      02      b39848dff
99                Server23Logins      03      k394890dd

查看 PREPAREEXECUTE 文档,这听起来可能是您要查找的内容。

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

我相信会有比这更简洁的代码,但这应该可行。 下面的查询会将您存储的 SQL 执行到 table (#FinalResult) 中,然后您可以将其加入另一个 table(基于 ID)以获得最终结果。

注意: 我使用了 AdventureWorksDW2012 中的 table 来形成我的 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;