在SQL Server中动态提到列名

时间:2015-03-08 02:02:24

标签: sql sql-server

我想选择我桌子的某些栏目。但是,我不想将它们作为select语句的一部分写入,而是想动态填充它。

说,我想选择以'后续'开头的所有列。表Mytable。我可以按如下方式选择列

select name from sys.columns where object_id=OBJECT_ID('Mytable') and name like 'Subsequent%'

我认为将其作为子查询提及如下可行,但我无法让它工作。

select top 100 (select name from sys.columns where object_id=OBJECT_ID('Mytable') and name like 'Subsequent%') from Mytable

1 个答案:

答案 0 :(得分:3)

您需要使用动态sql将列注入语句的选择列表。这是一种方法:

declare @Table SYSNAME;
declare @cols nvarchar(max);
declare @sql nvarchar(max); 

 SET @Table = N'TableName';

select @cols = stuff(
    (select ',' + quotename(name)   
     from sys.columns 
     where object_id=object_id(@Table) 
     and name like 'Subsequent%'
     for xml path(''), type)
    .value('.', 'nvarchar(max)'),1,1,'') 

set @sql = N'select ' + @cols + N' from '+ QUOTENAME(@Table)
exec sp_executesql @sql