从sp_executsql插入临时表
通常,我正在构建使用sp_executsql执行的动态SQL语句,如下所示:从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
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;