如何在动态sql中使用字符串列名

时间:2015-05-22 09:07:54

标签: sql-server tsql

考虑我有一个带有两个字段的表 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

2 个答案:

答案 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正在正确执行其工作。