2012-11-05 59 views
6

嗨我創建一個臨時表並將數據插入到表中。我將使用Temp表將其加入到特定的用戶。不能刪除臨時表SQL

CREATE TABLE #MyTempTable 
(
    UsersId int, 
    ValautionCount int 
) 

    SELECT 
     U.UserId, 
     COUNT(*) AS ValautionCount 
    INTO #MyTempTable 
    FROM 
     Users U 
     Right JOIN Valuation V ON V.ValuationUser = U.UserId 
    GROUP BY 
     U.UserId 



DROP TABLE #MyTempTable 

當我運行這個查詢時,我得到這個錯誤:數據庫中已經有一個名爲'#Temp'的對象。

但是當我運行這個查詢DROP TABLE #MyTempTable我得到這個錯誤:不能刪除表'#Temp',因爲它不存在或者你沒有權限。 即時通訊使用SQL 2012

+0

重複的問題 - http://stackoverflow.com/questions/2642111/drop-table-fails-for-temp-table – Sandeep

+0

@Sandeep的答案表明,tempTable創建不正確 –

回答

5

SELECT ... INTO ...語句本身創建#Temp表。這裏不需要CREATE TABLE語句。刪除「CREATE TABLE」語句並嘗試。

2

您的數據庫中已經有一個名稱爲「Temp」的實體。由於訪問權限,您無法刪除該實體。

+0

即使我仍然收到錯誤將臨時表更改爲#MyTempTable。更新於郵編 –

+0

刪除行刪除表#Temp並執行它將工作 –

2

不需要刪除臨時表,因爲它僅在會話前可見。

Create PROCEDURE proctemptable 
BEGIN 

IF object_id('tempdb..#Temp') is not null // Try this hope this will work 
BEGIN 
    DROP TABLE #Temp 
END 

CREATE TABLE #Temp 
(
    UsersId int, 
    ValautionCount int 
) 

SELECT 
    U.UserId, 
    COUNT(*) AS ValautionCount 
INTO #Temp 
FROM 
    Users U 
    Right JOIN Valuation V ON V.ValuationUser = U.UserId 
GROUP BY 
    U.UserId 

//DROP TABLE #Temp 

END 

無需刪除#TEMP表,它會自動放棄它當存儲過程執行完畢

OR

請參閱在SQL Server此鏈接瞭解更多臨時表

http://www.simple-talk.com/sql/t-sql-programming/temporary-tables-in-sql-server/

0

您可能正在代碼中創建兩次相同的表。

我遇到了同樣的問題,我已經抄一段代碼,我想重用(修改)到相同的程序,包括CREATE TABLE聲明 - 我得到有效創建表兩次 - 並且即使CREATE TABLE聲明分別在BEGINEND標記之間,並且有一個DROP TABLE語句在第二個CREATE語句之前刪除第一個「實例」,我遇到了這個確切的錯誤。

+0

接受的答案正確地解釋了錯誤發生的原因。你的回答沒有添加任何有用的東西。 – trincot