簡體   English   中英

在SQL Server中使用執行時不知道臨時表

[英]Don't know temp tables when use Execute in SQL Server

我有以下查詢:

if OBJECT_ID('tempdb..#tmpTables') is not null 
    drop table #tmpTables
Execute('select TABLE_NAME into #tmpTables from '+@dbName+'.INFORMATION_SCHEMA.TABLES')

while (select COUNT(*) from #tmpTables)>0
begin
    //here is my statement
end

當我執行此查詢時,出現此錯誤:

無效的對象名稱“ #tmpTables”。

但是當查詢更改為:

if OBJECT_ID('tempdb..#tmpTables') is not null 
    drop table #tmpTables
select TABLE_NAME into #tmpTables from INFORMATION_SCHEMA.TABLES
while (select COUNT(*) from #tmpTables)>0
begin
    //here is my code
end

有用。

我怎樣才能做到這一點 ?

以單個數字符號(#)開頭的表名稱是“本地臨時表”名稱。

與第一次創建或引用表時,在與SQL Server實例相同的連接期間,本地臨時表僅對其創建者可見。
用戶從SQL Server實例斷開連接后,將刪除本地臨時表。

並且當您通過EXEC()命令創建Local Temporary Table時,創建者將不是您,並且在完成該語句后將斷開連接,並且隨着完成連接臨時表的刪除。


您可以使用如下表變量:

DECLARE @tmpTables TABLE(TABLE_NAME nvarchar(max))

insert into @tmpTables
(select TABLE_NAME from INFORMATION_SCHEMA.TABLES)

暫無
暫無

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

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