Temporäre Tabellen erneut in einer Sitzung als Batch erstellen: Fehler(?)

03/12/2008 - 21:04 von Adrian Thomale | Report spam
Hallo!

Irgendwas habe ich mit den temporàren Tabellen immer noch nicht so
verstanden, hier beim SQL-Server 2000 :-(

Im SQL Query Analyzer (oder auch wenn ich von einem Client einen Batch
an den Server schicke), erhalte ich eine Fehlermeldung, wenn ich in
der gleichen Sitzung einige Zeilen weiter nach einem Drop erneut eine
temoràre Tabelle mit dem gleichen Namen erstellen möchte.

Z.B. das geht:
-
CREATE TABLE #tmpTest (ID int)
DROP TABLE #tmpTest
Select OBJECT_ID('tempdb..#tmpTest')

Hier wird mir auch Null zurückgegeben, soweit OK.
Ich kann auch wiederholt starten (F5), alles OK.

nun das:
CREATE TABLE #tmpTest (ID int)
DROP TABLE #tmpTest
Select OBJECT_ID('tempdb..#tmpTest')

CREATE TABLE #tmpTest (ID int)
DROP TABLE #tmpTest

Die Meldung:
Server: Nachr.-Nr. 2714, Schweregrad 16, Status 1, Zeile 5
In der Datenbank ist bereits ein Objekt mit dem Namen '#tmpTest'
vorhanden.

Dabei wird überhaupt keine Zeile ausgeführt. Mir erscheint, daß der
Batch erst gar nicht angenommen wird.

Wo ist mein Denkfehler?

Vielen Dank!
Grüße Adrian
 

Lesen sie die antworten

#1 Christoph Muthmann
04/12/2008 - 09:35 | Warnen spam
Adrian Thomale wrote:
Hallo!

Irgendwas habe ich mit den temporàren Tabellen immer noch nicht so
verstanden, hier beim SQL-Server 2000 :-(

Im SQL Query Analyzer (oder auch wenn ich von einem Client einen Batch
an den Server schicke), erhalte ich eine Fehlermeldung, wenn ich in
der gleichen Sitzung einige Zeilen weiter nach einem Drop erneut eine
temoràre Tabelle mit dem gleichen Namen erstellen möchte.

Z.B. das geht:
-
CREATE TABLE #tmpTest (ID int)
DROP TABLE #tmpTest
Select OBJECT_ID('tempdb..#tmpTest')

Hier wird mir auch Null zurückgegeben, soweit OK.
Ich kann auch wiederholt starten (F5), alles OK.

nun das:
CREATE TABLE #tmpTest (ID int)
DROP TABLE #tmpTest
Select OBJECT_ID('tempdb..#tmpTest')

CREATE TABLE #tmpTest (ID int)
DROP TABLE #tmpTest

Die Meldung:
Server: Nachr.-Nr. 2714, Schweregrad 16, Status 1, Zeile 5
In der Datenbank ist bereits ein Objekt mit dem Namen '#tmpTest'
vorhanden.

Dabei wird überhaupt keine Zeile ausgeführt. Mir erscheint, daß der
Batch erst gar nicht angenommen wird.

Wo ist mein Denkfehler?



Hallo Adrian,
der Fehler tritt bereits bei der Syntaxprüfung auf. Es wird also noch kein
Statement ausgeführt.
Hier wird der logische Ablauf in seiner Gesamtheit nicht erkannt.
Setzt Du ein GO vor das zweite Create làuft es.

Einen schönen Tag noch,
Christoph
Microsoft SQL Server MVP
http://www.insidesql.org

Ähnliche fragen