从sp_executsql插入到临时表中



通常,我正在使用如下sp_executsql执行动态SQL语句:

EXEC sp_executesql @TempSQLStatement 

我需要在某些东西(表变量或临时表)中插入返回结果行集,但是我收到以下错误:

Msg 208, Level 16, State 0, Line 1746
Invalid object name '#TempTable'.

执行此操作后:

INSERT INTO #TempTable
EXEC sp_executesql @TempSQLStatement 

从我所读到的内容来看,我相信这个问题是由于我没有指定临时表的列而引起的,但我无法做到这一点,因为返回列计数不同。

我已经读到我可以使用全局临时表,但我以前做过,想知道是否有其他方法可以做到这一点。

你不能。根本无法从 EXEC 输出架构创建 #temptable。

INSERT ... EXEC要求表存在(因此必须在执行之前知道架构)。

SELECT ... INTO不支持将 EXEC 作为源。

如果使用 INSERT INTO 语句,则必须先创建一个表。

另一种方法,如果你想将SQL语句结果存储到临时表中,你可以使用SELECT ...INTO,但在这种情况下,您应该更改@TempSQLStatement并添加INTO #TempTable,然后再FROM获取它。

例如,如果您的@TempSQLStatement仅包含一个FROM关键字:

SET @TempSQLStatement=REPLACE(@TempSQLStatement,' FROM ',' INTO ##TempTable FROM ');
EXEC sp_executesql @TempSQLStatement; 
SELECT * from ##TempTable;

相关内容

  • 没有找到相关文章

最新更新