2014-05-21 103 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您可以创建自己的选择