我需要一些关于执行存储在表的列中的查询的帮助。
我的表名是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
答案 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数据类型的正确转换。