2014-05-21 128 views
0

是否可以在select語句中爲列名使用一組查詢結果?列名的TSQL子查詢?

例子,我有一個名爲TableA的表格:

Column: Type: 
KeyOne  nvarchar(5) 
KeyTwo  nvarchar(5) 

表B是另一個表,其列名稱可能存儲在表A。

假設表B是這樣的:

Column: Type: 
Val1  int 
Val2  int 

有什麼辦法,我可以做一個這樣的查詢,以獲得列?

SELECT (select TOP 1 KeyOne, KeyTwo FROM TableA) 
FROM TableB 

使用字符串另一個例子是這樣的:

SELECT (select 'Val1', 'Val2') 
FROM TableB 

在沒有串聯SQL任何方式這可能嗎?

+3

它將需要動態SQL。 –

+0

@GoatCO希望儘可能遠離這一點。好吧。感謝您的回覆:) –

回答

3

不幸的是,你只能使用動態SQL做到這一點,但它是非常簡單的:

DECLARE @cols VARCHAR(MAX) = (SELECT TOP 1 KeyOne+','+KeyTwo FROM TableA) 
     ,@sql VARCHAR(MAX) 
SET @sql = 'SELECT '[email protected]+' FROM TableB' 
EXEC (@sql) 
+0

謝謝!我最終將我的初始查詢放到一個臨時表中,並將我的動態列轉換爲一個用逗號分隔的字符串,並運行一個動態sql select來獲取選定的列。 –

1

您可以從SYS.COLUMNS系統視圖或使用其他管理視圖

select name from sys.columns where object_id = object_id(N'TableName') 
動態讀取表的列名

然後通過創建dynamic SQL query您可以創建自己的選擇