Tsql 如何将动态透视变量输出保存为SQL Server表

Tsql 如何将动态透视变量输出保存为SQL Server表,tsql,sql-server-2005,variables,pivot,Tsql,Sql Server 2005,Variables,Pivot,通过使用动态SQL创建具有动态创建的列名的透视表,我已经成功地构建了我一直在寻找的输出 我的代码是: IF OBJECT_ID('tempdb..#TempDB') IS NOT NULL DROP TABLE #TempDB SELECT CASEID, FORMNAME, NAME, VALUE INTO #TempDB FROM dbo.EFORM WHERE FORMNAME='IncidentReporting' IF OBJECT_ID('tempdb..#TempDB1') I

通过使用动态SQL创建具有动态创建的列名的透视表,我已经成功地构建了我一直在寻找的输出

我的代码是:

IF OBJECT_ID('tempdb..#TempDB') IS NOT NULL
DROP TABLE #TempDB
SELECT CASEID, FORMNAME, NAME, VALUE INTO #TempDB FROM dbo.EFORM WHERE FORMNAME='IncidentReporting'

 IF OBJECT_ID('tempdb..#TempDB1') IS NOT NULL
DROP TABLE #TempDB1
SELECT DISTINCT Name INTO #TempDB1 FROM #TempDB

DECLARE @columns varchar(max)
DECLARE @query varchar(max)

SELECT @columns = COALESCE(@columns + ',[' + cast([Name] as varchar(100)) + ']', 
             '[' + cast([Name] as varchar(100))+ ']') 
             FROM #TempDB1

SET @query = 'SELECT * FROM #TempDB AS PivotData '
SET @query = @query  + 
'PIVOT (MAX(VALUE) FOR [NAME] IN (' + @columns + ')) AS p'

EXEC (@query)
这成功地为我提供了如下结果:

CASEID  FORMNAME             Column1    Column2 Column3
501000000621    IncidentReporting   Value1  Valuea  Valuev
501000000622    IncidentReporting   Value2  Valueb  Valuew
601000000126    IncidentReporting   Value3  Valuec  Valuex
601000000127    IncidentReporting   Value4  Valued  Valuey
601000000128    IncidentReporting   Value5  Valuee  Valuez
从@query变量输出的这些结果的格式正是我想要的这些结果的表格格式

有人能告诉我如何将@query变量中的结果放入标准SQL表中吗

我曾尝试过这样的语句,但得到的消息是“++@columns+'附近的语法不正确”:


非常感谢。

在您现有的代码中,将您的
添加到此行中:

SET @query = 'SELECT * FROM #TempDB AS PivotData '
因此,您可以:

SET @query = 'SELECT * INTO #TempDB4 FROM #TempDB AS PivotData '
或者以相同的方式添加
插入


要使未成功的查询按预期工作,您必须将其转换为动态SQL,就像成功的查询一样,并使用
exec
sp_executesql

来调用它。非常感谢您的帮助。你不知道谷歌有多少次没能想出这个简单的解决方案。很好用!
SET @query = 'SELECT * INTO #TempDB4 FROM #TempDB AS PivotData '