考虑我有一个带有两个字段的表 TEMP
单位区域
==== ====
Unit1 Zone1
Unit2 Zone2
我正在尝试使用动态查询实现以下简单查询的结果
select UNIT, ZONE from TEMP
我的动态查询在下面给出
declare @qry nvarchar(1000)
set @qry= 'declare @str varchar(100) = ''UNIT, ZONE''
select @str from TEMP '
execute sp_executesql @qry
但是此查询是选择字符串值('' UNIT,ZONE'')而不是以下行
Unit1 Zone1
Unit2 Zone2
简而言之:如何告诉sql @str指定表中的列?
我知道这可以通过提供如下参数来完成,但不幸的是,这不是我想要的。
declare @qry varchar(1000)
declare @str varchar(100) = 'UNIT, ZONE'
set @qry ='select ' + @str + ' from TEMP'
execute sp_executesql @qry
答案 0 :(得分:0)
您可以在Dynamic SQL中尝试动态SQL
declare @query nvarchar(max) = ''
set @query = '
declare @columns nvarchar(50) = ''Unit, Zone''
declare @innerQuery nvarchar(255) = '' select '' + @columns + '' from Table ''
exec(@innerQuery)
'
exec(@query)
但这将是真正的自杀......
答案 1 :(得分:-1)
以这种方式看待它。
如果你自己执行变量@qry的查询(即没有sp_executesql):
declare @str varchar(100) = 'UNIT, ZONE'
select @str from TEMP
你会得到什么? 答案是UNIT,ZONE(重复表中的行数)
因此sp_executesql正在正确执行其工作。