从sp_executsql插入临时表

从sp_executsql插入临时表,tsql,temp-tables,sp-executesql,global-temp-tables,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

通常,我正在构建使用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 
从我所读到的内容来看,我认为问题的原因是我没有指定临时表的列,但我无法这样做,因为返回列计数不同


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

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

如果您想将SQL语句结果存储到temp表中,可以使用另一种方法,但在这种情况下,您应该更改@TempSQLStatement并将其添加到Tritable中,然后再从中获取它

例如,如果@tempsql语句只包含一个FROM关键字:


你不能。根本没有办法从EXEC输出模式创建一个诱人的

插入。。。EXEC要求表存在,因此在执行之前必须知道模式


选择。。。INTO不支持EXEC作为源。

因此,我应该在动态SQL语句中使用一个全局临时表来存储数据,然后从中提取数据?您应该询问解决方案,而不是发布您试图解决的实际问题。有很多方法可以实现你想要的,但是如果你解释一下原因会更好。一般来说,尽量避免处理未知/未定义的结果形状,您会不断遇到此问题,“解决方案”只会将问题转移到其他地方,而不会解决它。SQL不是一种动态语言。事实上,知道我不能做到这一点就足够了。我会改变我的逻辑来处理这种情况。感谢您帮助我解决此问题。这可能会帮助您:如果字符串'FROM'在@TempSQLStatement中出现多次,则将中断
SET @TempSQLStatement=REPLACE(@TempSQLStatement,' FROM ',' INTO ##TempTable FROM ');
EXEC sp_executesql @TempSQLStatement; 

SELECT * from ##TempTable;