我有一个包含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
答案 0 :(得分:0)
查看EXECUTE
和var 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;