Wie überprüft man korrekt, ob eine temporäre Tabelle in SQL Server 2005 vorhanden ist?
Ich habe eine Abfrage, wo ich fügen Sie einige Werte aus einer Tabelle:
SELECT ID, NAME INTO #tmpTable1
FROM TableOriginal
Erste Ausführung ist in Ordnung, wenn ich drücken Sie F5(Run) im MSSMS (Microsoft Sql Server Management Studio), die Fehler ist aufgetreten:
Msg 2714, Ebene 16, Status 6, Zeile 4
Es ist bereits ein Objekt mit dem Namen '#tmpTable1 " in der Datenbank.
Gut. Ich beschloss zu prüfen, bevor Sie Daten einfügen von TableOriginal
zu #tmpTable1
mit:
IF OBJECT_ID('tempdb.#tmpTable1') IS NOT NULL
DROP TABLE #tmpTable1
Nicht funktioniert, den Fehler zeigt erneut, wie oben beschrieben.
Sah ich in tempdb
Datenbank die folgenden temporären Tabelle-name:
dbo.#tmpTable1__________________0000007
Warum? Jedes mal, wenn Sie erstellen eine temporäre Tabelle (unter Verwendung der ersten Abfrage), der name der Tabelle wird automatisch erzeugt, im MSSMS ?
So entfernen Sie die vorhandene temporäre Tabelle um eine neue Tabelle mit den neuen Werten ?
InformationsquelleAutor der Frage Snake Eyes | 2012-08-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist verdammt nah - Sie brauchen, um zwei Punkte in Ihren check:
Grundsätzlich ist zu sagen: check-in die
tempDB
und es ist mir egal, was schema Tisch inAls Joe zu Recht gesagt: das ist nicht 100% richtig: es überprüft nicht in jedem schema - es werden nur check-in der Standard-Besitzer-schema - in der Regel
dbo
. So würde das auch funktionieren:Wenn Sie geschehen, zu erstellen Sie Ihre Objekte in einem schema, andere als die Standard-Besitzer ist, dann müssen Sie explizit angeben, das schema, das Sie sich beziehen. Aber die temp-Tabellen in
tempDB
sind in der Tat die Schaffung derdbo
schema.InformationsquelleAutor der Antwort marc_s
Dies ist nicht eine Antwort auf die Frage, wollte nur mal vorübergehend per post eine Antwort, die etwas über Putting
.dbo.
vs...
bei der Referenzierung einer Tabelle #temp.Konnte ich nicht finden ein Weg, um eine Tabelle #temp wirklich Eigentum durch etwas anderes als die dbo. Probieren Sie es aus:
Ergebnisse:
Wurde diese auf SQL Server 2012. Getestet habe ich diese auf SQL Server 2005 und der einzige Unterschied war die object_id-Werte waren positiv. Ich habe auch versucht mit:
blat
blat.#pound
von einem Benutzer erstellt, deren Standard-schema istblat
In allen drei Fällen das gleiche Ergebnis wie oben erreicht wurden.
Können Sie auch nicht erstellen Sie zwei #temp-Tabellen mit dem gleichen Namen in verschiedenen schemas:
Ergebnis:
Dies ist nicht ein parsing-problem ist (wie viele in der Tabelle #temp Probleme sind); Sie können diese beiden Aussagen getrennt und die gleiche Fehlermeldung erhalten.
So, das ist eine weitschweifige Art zu sagen, die Sie nicht immer benötigen, geben Sie das schema beim auflösen einer Tabelle #temp Namen, es wird immer erstellt werden, unter
dbo
und Auflösung zumindest unterOBJECT_ID
ignoriert das schema, das Sie angeben (OBJECT_SCHEMA_NAME
auch immer zurückdbo
wenn die Ausführung im Kontext von #tempdb, aber nicht in andere Datenbank). Alle Wetten sind aus, wenn Sie versuchen, queryschema_id
imtempdb.sys.objects
.InformationsquelleAutor der Antwort Aaron Bertrand
Temp-Tabelle definiert, so wird so lange existieren, wie die Verbindung, die erstellt wird, offen. In der Regel gibt es keine Notwendigkeit, um zu überprüfen, ob es existiert oder legen Sie es manuell, da haben Sie die volle Kontrolle in Ihrem Zusammenhang, aber wenn Sie wirklich brauchen, um es zu überprüfen Sie können überprüfen für die tempdb-Datenbank.dbo.#tempTable.
InformationsquelleAutor der Antwort Fedor Hajdu
InformationsquelleAutor der Antwort Aakash Arora
IF OBJECT_ID('tempdb.dbo.#tmpTable1%") IST NICHT NULL
🙂
InformationsquelleAutor der Antwort user4521610