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

时间:2017-10-03 22:32:36

标签: sql-server-2008-r2 dynamic-sql

我有一个包含SQL查询的varchar(max)列的表。这些查询是基于其他表中的值动态生成的。最终,我需要获得这些查询的结果(这只是简单的count(*)语句)并将它们与其他表中的信息连接起来。

是否可以从表中存储的查询中获取结果而无需单独运行它们?

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 个答案:

答案 0 :(得分:0)

查看EXECUTEvar base = { a: 600, b: 1.15, c: 0, d: 200, e: 3, f: 3, g: 1, h: 1, } var array2 = new Array(); for(var i=1;i<=3;i++){ base.a = base.a*12 base.b = base.b-0.01 base.d = base.d*4 base.e = Math.ceil(base.e * 1.5) base.f = base.e array2.push(base) } 文档,听起来就像您正在寻找的那样。

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

答案 1 :(得分:0)

我相信会有更清晰的代码,但这应该有用。 下面的查询将把您存储的SQL执行到一个表(#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;