从存储在 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
查看 PREPARE
和 EXECUTE
文档,这听起来可能是您要查找的内容。
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;
我有一个 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
查看 PREPARE
和 EXECUTE
文档,这听起来可能是您要查找的内容。
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;