【问题标题】:Getting access to a dynamic table from dynamic sql从动态 sql 访问动态表
【发布时间】: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


【解决方案1】:

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

 SELECT * INTO <YOUR TABLE>
    FROM #PreProcessed
    PIVOT (SUM(Quotes)
            FOR [UW] IN (' + @UWColumns + ')
            ) AS bob'

【讨论】:

  • 您好,感谢您的帮助,但我收到此错误:Msg 208, Level 16, State 0, Line 35 Invalid object name '#temp'。
  • 哦,没有抓住表变量。我不确定你会怎么做,因为你必须声明变量。为什么要将结果保存在临时表中?
  • 我正在编写一份相当复杂的报告,我需要在我正在生成的数据中添加更多信息。不幸的是,这一切都将被包装成一个需要随时运行的 sp。我的同事建议使用第二张表并加入我的日期列
  • 所以您只需要在存储过程的生命周期内使用它吗?也许您可以将其用作 CTE? ;with &lt;select statement&gt; as &lt;CTE NAME&gt;
【解决方案2】:

我能找到解决此问题的唯一方法是在动态 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    相关资源
    最近更新 更多