列名称的TSQL子查询?

时间:2014-05-21 20:19:03

标签: sql sql-server tsql

是否可以在select语句中对列名使用一组查询结果?

示例,我有一个名为TableA的表:

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

TableB是另一个表,其列名可能存储在TableA中。

假设TableB是这样的:

Column:    Type:
Val1       int
Val2       int

有什么方法可以像这样进行查询来获取列?

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

使用字符串的另一个例子是这样的:

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

如果没有连接SQL,这有可能吗?

2 个答案:

答案 0 :(得分:4)

不幸的是,您只能使用动态SQL执行此操作,但它非常简单:

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

答案 1 :(得分:1)

您可以从sys.columns系统视图或使用其他管理视图动态读取表列名称

select name from sys.columns where object_id = object_id(N'TableName')

然后通过创建dynamic SQL query,您可以创建自己的选择