我想选择我桌子的某些栏目。但是,我不想将它们作为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
答案 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