通常,我正在构建使用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
根据我的阅读,我认为问题是由于我没有指定临时表的列,但我无法执行此操作,因为返回列计数各不相同。
我已经读过我可以使用全局临时表,但我之前已经这样做了,并且想知道还有其他方法可以做到这一点。
答案 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;