簡體   English   中英

從動態查詢中的另一個臨時表創建臨時表

[英]Create temp table from another temp table in Dynamic Query

我嘗試從另一個#temp表創建#temp表,然后通過錯誤進行處理。

 Set @Query = 'Select Work_Order_No,ServiceCode,StageNo,ItemWeight,StagePercentage,FebLocation 
    INTO #TempMaster
    FROM #Temp '
EXEC(@Query)

上面的查詢拋出錯誤

Invalid object name '#TempMaster'.

如果我執行此查詢

Set   @Query = 'Select Work_Order_No,ServiceCode,StageNo,ItemWeight,StagePercentage,FebLocation 
    INTO ##TempMaster
    FROM #Temp '

EXEC(@Query)

然后工作正常。 這兩個語句之間有什么不同。 第一個查詢引發錯誤而第二個查詢成功運行的原因是什么。

編輯之后,不同之處在於,在子作用域中創建的本地#temp表在該作用域退出時會自動刪除,並且對父作用域不可見。 ##前綴表是全局臨時表,並且在范圍退出時不會自動刪除。 相反,當創建的連接關閉並且當前沒有其他連接訪問它們時,它們將被丟棄。

無論如何,這里顯然沒有使用EXEC要求,因此您可以通過使用最初發布的代碼來避免此問題。

SELECT Work_Order_No,
       ServiceCode,
       StageNo,
       ItemWeight,
       StagePercentage,
       FebLocation
INTO   #TempMaster
FROM   #Temp 

試試這個-

DECLARE @SQL NVARCHAR(MAX)

SELECT @SQL = '
IF OBJECT_ID (N''tempdb.dbo.##TempMaster'') IS NOT NULL
   DROP TABLE ##TempMaster

SELECT Work_Order_No,ServiceCode,StageNo,ItemWeight,StagePercentage,FebLocation 
INTO ##TempMaster
FROM #Temp'

EXEC sys.sp_executesql @SQL

這樣做:

set @Query = 'select Work_Order_No,ServiceCode,StageNo,ItemWeight,StagePercentage,FebLocation 
INTO #TempMaster1
FROM tablename

select * into #t from #TempMaster1

drop table #TempMaster1
drop table #t '

exec (@Query)

如果在動態查詢中創建#temp表,則該表僅在該動態查詢中有效,並且在動態查詢執行完畢后將無法再使用它。

如果您確實需要動態填寫表格-您應該先創建表格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM