执行存储在表的列中的查询

时间:2016-08-09 04:21:17

标签: sql-server tsql sql-server-2012

我需要一些关于执行存储在表的列中的查询的帮助。

我的表名是Stats。它包括一些报告查询:

www.xyz.koopsz.com

www.abc.koopsz.com

www.mno.koopsz.com
查询列中的值只是示例。它们在生产中将是更复杂的查询,但它们总是返回一个结果。

是否可以使用如下输出编写查询:

id     | key     | query
------ | ------  | ------
1      | reportA | select 1
2      | reportB | select 2
3      | reportC | select count(id) from Users
4      | reportD | select top 1 firstname from Users order by 1 desc

3 个答案:

答案 0 :(得分:2)

你可以使用像这样的动态查询来尝试 -

DECLARE @temp table ([key] [varchar](100), [query] [varchar](1000));

INSERT @temp ([key], [query]) VALUES ('reportA', 'select 1');
INSERT @temp ([key], [query]) VALUES ('reportC', 'select count(id) from Users');
INSERT @temp ([key], [query]) VALUES ('reportA', 'select top 1 firstname from Users order by 1 desc');

DECLARE @qry varchar(max) = ''

Select @qry += 'SELECT ' + QUOTENAME([key], '''') 
            + ' AS Yourkey, CAST((' + [query] + ') AS VARCHAR) AS Result UNION ALL ' 
From @temp

SET @qry = LEFT(@qry, LEN(@qry) - 10)

PRINT(@qry)
EXEC(@qry)

<强>结果

Yourkey Result
-------------------
reportA   1
reportC   500

答案 1 :(得分:0)

是的,请使用CASE ..

Select 
case 
when key='reporta' then replace(query,'select','')
when key='reportb' then replace(query,'select','')
when key='reportc' then cast((select count(id) from users) as varchar(100))
when key='reportd' then (select top 1 firstname from Users order by 1 desc)
End
from yourtable

答案 2 :(得分:0)

使用While循环遍历每个ID,获取&#34;查询&#34;对于每次迭代,将其分配给nvarchar(max)变量,然后创建临时表#temp(value varchar(max)),然后运行&#34; INSERT INTO #temp EXEC(@query),然后从#temp获取值最后更新你的桌子。

请注意,您可能需要先更新表,以包含对VARCHAR数据类型的正确转换。