从临时表中选择失败

时间:2016-02-04 21:31:28

标签: sql sql-server sql-server-2012

我正在将数据插入临时表并查询临时表失败

DECLARE @SQLQuery AS NVARCHAR(500)

SET @SQLQuery  = 'SELECT  Top 100 *
                  INTO #tempTable
                  FROM ' + @origDB + '.dbo.' + @origTable + ' o WITH (NOLOCK) ' 

EXECUTE sp_executesql @SQLQuery

当我尝试查询临时表时,如此

select * from #tempTable

我收到以下错误:

  

无效的对象名称'#tempTable'。

2 个答案:

答案 0 :(得分:3)

MSDN提供

  

您遇到的问题是范围。 TEMP表是在EXEC()方法的范围内创建的,因此在函数返回后它不可用。要解决此问题,请在调用EXEC()之前创建临时表,并使用INSERT INTO而不是SELECT INTO。

答案 1 :(得分:2)

正如其他人所说,临时表的范围仅限于创建它的会话上下文 - 存储过程在其自己的上下文中运行。

可以使用全局临时表##tempTable,但它通常是个坏主意,因为除了创建它之外的其他会话可以使用它。