【发布时间】:2013-12-09 14:45:19
【问题描述】:
早安 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
谢谢大家
【问题讨论】:
-
您可能需要创建一个真实的表。在
sp_exectutesql之外创建的临时表将在 in 内具有范围。但是当范围返回到调用代码时,在其中创建的任何临时表(临时表、变量等)都将取消分配。因此,创建表的动态 SQL 以及填充表的动态 SQL。或者,重构您的代码以使用源(标准化)数据。
标签: sql sql-server dynamic-sql temp-tables sp-executesql