2010-09-09 5 views
30

Meine Version von SQLite unterstützt den Operator IF EXISTS nicht. Wie kann ich eine Tabelle löschen, die möglicherweise existiert oder nicht existiert, ohne einen Fehler zu bekommen, der auf mich geschlagen wird?Vorhandene Tabelle in SQLite löschen, wenn der Operator IF EXISTS nicht unterstützt wird

Ich kann die Version in einer Live-Anwendung jetzt nicht aktualisieren, daher kann ich keine SQLite-Version verwenden, die IF EXISTS unterstützt.

+1

Kannst du den Fehler nicht "fangen"? –

Antwort

19

Die official documentation sagt, IF EXISTS zu verwenden, also vermute ich, dass Ihr bester Plan ein Upgrade ist.

Wenn Sie nicht können, müssen Sie sehen, ob Sie eine triviale Operation in der Tabelle ausführen können, die erfolgreich ausgeführt wird, ob die Tabelle leer ist oder nicht; Wenn es gelingt, sollten Sie die Tabelle löschen, wenn sie fehlschlägt, ist die Tabelle bereits verschwunden. Ein Beispiel für die Art von Operation könnte zu versuchen sein:

SELECT COUNT(*) FROM theTable; 

Beachten Sie, dass die möglichen Fehler von diesem auf der Sprachebene zu stoppen müssen, und Sie können die gesamte Partie (Sonde, Fehlerfalle wickeln wollen , Drop-Tabelle) in einer Transaktion. Natürlich ist der andere Ansatz, wenn Sie in die Fehlerbehandlung geraten, einfach die Tabelle zu löschen und den Fehler trotzdem zu behandeln.

2

Sie könnten irgendwie die Metadatentabelle in der Abfrage verwenden, um herauszufinden, ob die Tabelle vorhanden:

SELECT count(*) > 0 FROM sqlite_master where tbl_name = "<table_name>" and type="table" 
+0

Hmm ... wie würde ich das benutzen, wenn ich den Tisch fallen lasse? – HyderA

+0

kann man nicht schreiben "if (SELECT count (*) FROM sqlite_master wo tbl_name =" "und type =" table ")> 0 dann drop table " Weiß nicht, ob das die korrekte Syntax für sqlite ist. – Marcus

97

Sie verwenden können:

DROP TABLE IF EXISTS TABLE_NAME; 
5

Nur diese verwenden.

DROP TABLE TABLE_NAME; 
Verwandte Themen