0

美好的一天 StackOverflow

我从动态 sql 创建的表可以有任意数量的列,因为它是一个数据透视表。

-- Pivot the table so we get the UW as columns rather than rows
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = '
SELECT *
FROM #PreProcessed
PIVOT (SUM(Quotes)
        FOR [UW] IN (' + @UWColumns + ')
        ) AS bob'

我运行此代码来运行我的动态 sql。

EXEC sp_executesql @SQL,
                  N'@UWColumns nvarchar(MAX)',
                  @UWColumns

我的问题是,如何存储结果表?特别是当我不知道它将有多少列,甚至不知道这些列将被称为什么时?

我尝试了下面的代码,但它不起作用

   INSERT INTO #Temp
   EXEC sp_executesql @SQL,
                  N'@UWColumns nvarchar(MAX)',
                  @UWColumns

感谢大家

4

2 回答 2

0

我能找到解决这个问题的唯一方法是在动态 sql 中进行所有计算。这意味着我必须在两张桌子上工作。

-- Pivot the table so we get the UW as columns rather than rows
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = '
SELECT * INTO #temp
FROM #PreProcessed
PIVOT (SUM(Quotes)
        FOR [UW] IN (' + @UWColumns + ')
        ) AS bob

SELECT DISTINCT t1.Date, d.Declines AS ''Declines'' , '+@UWColumns+'
FROM #temp AS t1 LEFT OUTER JOIN
#Declines AS d ON t1.DATE = d.DATE
'

PRINT @SQL

EXEC(@SQL)
于 2013-12-09T16:40:47.437 回答
0

SQL Server 使用SELECT * INTO ...., 而不是CREATE TABLE AS语法。因此,您需要将动态 sql 修改为:

 SELECT * INTO <YOUR TABLE>
    FROM #PreProcessed
    PIVOT (SUM(Quotes)
            FOR [UW] IN (' + @UWColumns + ')
            ) AS bob'
于 2013-12-09T14:49:34.910 回答