2016-08-05 120 views
1

我有這個代碼,應該刪除一個臨時表,如果它存在,但我仍然收到錯誤:Cannot drop the table '#jobsconsumed', because it does not exist or you do not have permission.有人可以幫我嗎?我的I.T.管理員不認爲這是一個權限問題。#temp表沒有被丟棄

IF (SELECT object_id('TempDB.#jobsconsumed')) IS NULL 
    BEGIN 
    DROP Table #jobsconsumed 
END 
+1

我想你應該嘗試兩點:'TempDB的..#jobsconsumed' – HoneyBadger

+0

什麼是2點呢? – whatwhatwhat

+1

可能'不是NULL'是你真正想要的邏輯。爲什麼要刪除不存在的內容? –

回答

3
IF (SELECT object_id('TempDB.#jobsconsumed')) IS NULL 
    BEGIN 
    DROP Table #jobsconsumed 
END 

上面的代碼將進入開始條款,只有當不是Temptable存在..

檢查和下降不是Temptable,正確的方法是低於

IF object_id('Tempdb..#test') is Not null 
is same as 
    IF object_id('Tempdb.dbo.#test') is Not null 
Drop Table #test 

有沒有必要在這種情況下,由於IF將執行立即聲明

s對臨時表的架構方面OME測試..

use tempdb; 

create schema hr 

create table hr.#t(c int) --this will work 
create table #t(c int) --this will fail 

create table #t1 --no schema ,so it will create a temp table in DBO Schema by default. 

--To drop the table 
drop table #t --this will drop across all schemas 
+0

問題:我正在使用這一行將值放入#temp表中。 '(SELECT t.ref_num,t.ref_line_suf INTO #jobsconsumed FROM ISW_LPTrans AS t WHERE t.item = @item AND t.lot = @lot AND(t.trans_type ='I'or t.trans_type ='W')) '但根據你的回答,這應該失敗,因爲我使用'#jobsconsumed'而不是'dbo。#jobsconsumed'。爲什麼它沒有失敗? – whatwhatwhat

+1

它不會失敗,bcoz默認會在dbo.schema中創建 – TheGameiswar