2013-10-02 4 views
6

Ich habe db A und db B. Am Anfang einer gespeicherten Prozedur möchte ich alle Zeilen von B.mytable bis B.mytablebackup sichern. Der Rest der gespeicherten Prozedur wird für Tabellen auf Datenbank A ausgeführt (die Daten sammelt und in B.mytable schreibt).Wie überprüft man das Vorhandensein einer Tabelle von einer anderen SQL-Datenbank?

So überprüfe ich, ob B.mytablebackup existiert

IF EXISTS(SELECT 1 FROM B.dbo.mytablebackup) 

und wenn es tut, tut die gespeicherte Prozedur ein

INSERT INTO B..mytablebackup SELECT * FROM B..mytable 

Wenn es nicht existiert ein

SELECT * INTO B..mytablebackup from B..mytable 

Aber wenn ich die gespeicherte Prozedur ausführen, erhalte ich den Fehler

Es ist bereits ein Objekt mit dem Namen ‚mytablebackup‘ in der Datenbank

ich eine Print Anweisung hinzugefügt und Ausführung nimmt der Zweig der IF „existiert nicht“.

Was mache ich falsch?

+1

*** SQL *** ist nur die * strukturierte Abfragesprache * - eine Sprache, die von vielen Datenbanksystemen verwendet wird, aber kein Datenbankprodukt ... viele Dinge sind herstellerspezifisch - also müssen wir das wirklich tun wissen, was ** Datenbank-System ** (und welche Version) Sie verwenden (bitte aktualisieren Sie die Tags entsprechend) .... –

+1

@marc_s Ich würde vermuten, dass es MSSQL basiert auf 'db.schema.tbl' Format – Kermit

+2

' IF EXISTS (SELECT 1 FROM B.dbo.mytabackup) überprüft, ob es mindestens eine Zeile * innerhalb von * 'mytabackup' gibt. Es sagt Ihnen nicht, ob die Tabelle selbst * existiert * (wenn die Tabelle nicht existiert, wird es einen Kompilierungsfehler erzeugen) –

Antwort

10

Für SQL Server sollten Sie Systemansicht sys.tables verwenden, um zu überprüfen, ob Tabelle vorhanden ist.

+0

Danke, Eric. Das hat den Trick gemacht. – DeveloperM

Verwandte Themen