2015-05-22 54 views
0

考慮我有一個表TEMP兩個字段
單元區中
==== ====
1單元1區
UNIT2 2區
如何使用字符串列名動態SQL內

我正嘗試使用動態查詢實現以下簡單查詢的結果

select UNIT, ZONE from TEMP 

我的動態查詢是gi VEN低於

declare @qry nvarchar(1000) 
set @qry= 'declare @str varchar(100) = ''UNIT, ZONE'' 
select @str from TEMP ' 
execute sp_executesql @qry 

但這查詢選擇字符串值( '' 單位,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

究竟爲什麼你不想這樣做,你已經知道的工作方式?使用DynamicSQL *(動態編寫一個用sp_executesql執行的新查詢)*的全部原因是您的變量只能是字符串值,並且不能是對象(數據庫,模式,表,列等)引用... – MatBailie

+0

解釋你爲什麼不想使用你已知的方法。如果我們不知道爲什麼你找到的不適用 – Paolo

+0

@Paolo感謝您的回覆,我們無法給您一個選擇。我知道它看起來很奇怪,但是字段名也是動態生成的,所以在調用'execute'之前我不能聲明它。在替換值時,我可以將查詢作爲_select foo與temp_,而不是_select從temp_中選擇'foo'? –

回答

-1

看看這樣。

如果你(不sp_executesql的即)執行@qry自己變量的查詢:

declare @str varchar(100) = 'UNIT, ZONE' 
select @str from TEMP 

你會得到什麼? 答案是單位,區(重複的沒有。在表中的行)

因此sp_executesql的正確執行它的工作。

0

您可以嘗試動態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) 

但它是真實的自殺......

+2

這就是所謂的初始:-) –