4

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

从我读过的内容来看,我认为问题是因为我没有指定临时表的列,但我无法做到这一点,因为返回列数不同。

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

4

2 回答 2

3

如果您使用 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;
于 2013-11-01T09:47:48.653 回答
3

你不能。根本没有办法从 EXEC 输出模式创建 #temptable。

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

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

于 2013-11-01T09:51:49.220 回答