请考虑以下代码段。我使用stuff()
生成字段列表。我在以下查询中使用了相同的列表。
select top 1
stuff((
select ',' + 'D.[' + ColumnName + ']'
from #report_fields a
where a.FieldType like 'X' or a.FieldType like 'Y'
for XML path('')),1,1,'') as document_fields
from #report_fields a
;
-- returns a fieldlist: D.[AAA], D.[BBB], D.[CCC], ...
select
D.[AAA], D.[BBB], D.[CCC], ...
into
#document_fields
from
Document D
group by
D.[AAA], D.[BBB], D.[CCC], ...
我的问题:我需要第二个查询中的字段列表是动态的。我想将stuff()
的输出直接注入select...from document
查询。这样做最直接的方法是什么?我可以将字段列表放在变量中(以前在SQL中从未这样做过)或者我是否需要动态查询(我试图避免出于多种原因)。
非常感谢您的帮助。
[编辑]
declare @fieldlist nvarchar(max)
select top 1 @fieldlist =
stuff((
select ',' + 'D.[' + ColumnName + ']'
from #report_fields a
where a.FieldType like 'Text' or a.FieldType like 'Boolean'
for XML path('')),1,1,'')
from #report_fields a
declare @sql nvarchar(max)
select @sql = 'select ' + @fieldlist + ' into #document_fields from Document D group by ' + @fieldlist
exec sp_execute @sql
答案 0 :(得分:1)
我相信这必须通过动态sql完成:
DECLARE @Fieldlist NVARCHAR(MAX)
select top 1 @Fieldlist =
stuff((
select ',' + 'D.[' + ColumnName + ']'
from #report_fields a
where a.FieldType like 'X' or a.FieldType like 'Y'
for XML path('')),1,1,'')
from #report_fields a
DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = 'select '
+ @Fieldlist + '
into
#document_fields
from
Document D
group by '
+ @Fieldlist
EXEC sp_executesql @SQL