2012-11-05 10 views
6

Hi Im Erstellen einer Temp-Tabelle und Einfügen von Daten in die Tabelle. Ich werde die Temp-Tabelle verwenden, um sie dem bestimmten Benutzer hinzuzufügen.Kann temporäre Tabelle nicht löschen 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 

Wenn ich diese Abfrage ausführen bekomme ich diesen Fehler: Es ist bereits ein Objekt mit dem Namen ‚#temp‘ in der Datenbank.

Aber wenn ich diese Abfrage ausführen DROP TABLE #MyTempTable bekomme ich diesen Fehler: Kann die Tabelle '#Temp' nicht löschen, weil es nicht existiert oder Sie keine Berechtigung haben. Im mit SQL 2012

+0

Doppelte Frage - http://Stackoverflow.com/questions/2642111/drop-table-fails-for-temp-table – Sandeep

+0

@Sandeep die Antwort schlägt vor, dass die TempTable falsch erstellt wird –

Antwort

5

SELECT ... INTO ... Anweisung selbst erstellen Sie die Tabelle #Temp. Braucht hier keine CREATE TABLE-Anweisung. Entfernen Sie die Anweisung "CREATE TABLE" und versuchen Sie es.

2

Sie haben bereits eine Entität mit dem Namen "Temp" in Ihrer Datenbank. Und Sie können diese Entität aufgrund von Zugriffsberechtigungen nicht löschen.

+0

Ich bekomme immer noch den Fehler, selbst wenn ich Ändern Sie die temporäre Tabelle in #MyTempTable. In Post aktualisiert –

+0

Zeile entfernen Drop-Tabelle #Temp und excute es funktioniert –

2

Keine Notwendigkeit, die temporäre Tabelle zu löschen, da sie nur bis zur Sitzung sichtbar ist.

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 

Keine Notwendigkeit, die #temp Tabelle zu löschen, wird es automatisch fallen, wenn die gespeicherte Prozedur Ausführung

abgeschlossen

ODER

Bitte beachten Sie diesem Link für weitere temporäre Tabellen in SQL Server

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

0

Möglicherweise erstellen Sie die gleiche Tabelle zweimal in Ihrem Code.

ich das gleiche Problem erlebt, hatte ich einen Abschnitt von Code kopiert I (modifiziert) in das gleiche Verfahren, einschließlich einer CREATE TABLE Anweisung wieder zu verwenden wollte - ich effektiv zweimal die Tabelle war die Schaffung - und obwohl die CREATE TABLE Aussagen Waren zwischen separaten BEGIN und END Marker, und es gab eine DROP TABLE Anweisung fallen die erste "Instanz" vor der 2. CREATE Anweisung, traf ich diesen genauen Fehler.

+0

Die angenommene Antwort erklärt genau, warum der Fehler passiert. Ihre Antwort fügt nichts nützliches hinzu. – trincot

Verwandte Themen