是否可以在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,这有可能吗?
答案 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,您可以创建自己的选择