2016-02-04 104 views
-1

我將數據插入到一個臨時表和查詢的臨時表失敗從臨時表選擇失敗

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'。

+0

當我用tempTable替換#tempTable時,它確實起作用,數據填充在tempTable中 –

+0

你是否在同一個會話中從#tempTable中進行選擇? –

+1

比手動添加方括號更好,你應該使用QUOTENAME。除非您隨時隨地丟失和/或複製,否則NOLOCK可能會給您帶來問題。 http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/ –

回答

3

MSDN

,你必須與範圍的問題提供。 TEMP表是在EXEC()方法的範圍內創建的,因此它在函數返回後不可用。要解決此問題,請在調用EXEC()之前創建臨時表並使用INSERT INTO而不是SELECT INTO。

2

正如其他人所說,臨時表的範圍僅限於創建它的會話上下文 - 存儲過程在其自己的上下文中運行。

可能使用全局臨時表##tempTable,但它通常是一個壞主意,因爲它可用於創建它的其他會話。