从sp_executesql INSERT INTO临时表

时间:2013-11-01 09:39:31

标签: tsql temp-tables sp-executesql global-temp-tables

通常,我正在构建使用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 

根据我的阅读,我认为问题是由于我没有指定临时表的列,但我无法执行此操作,因为返回列计数各不相同。

我已经读过我可以使用全局临时表,但我之前已经这样做了,并且想知道还有其他方法可以做到这一点。

2 个答案:

答案 0 :(得分:3)

你做不到。根本无法从EXEC输出模式创建#temptable。

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

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

答案 1 :(得分:2)

如果使用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;