通常,我正在使用如下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;