2013-03-08 15 views
9

Ich verwende H2. Ich möchte einen Wert in eine Tabelle einfügen, wenn sie nicht existiert. Ich schaffe die Tabelle mit:In h2 Tabelle einfügen, wenn nicht existiert

CREATE TABLE IF NOT EXISTS $types 
    (type VARCHAR(15) NOT NULL UNIQUE); 

Und ich will etwas tun, wie

REPLACE INTO types (type) values ('type1'); 

ich an example über gefunden zu ersetzen, dass offenbar für MySQL funktioniert, aber ich bin mit h2. Aber ich erhalte eine Fehlermeldung, wenn ich das von meiner h2-Konsole ausführen:

Syntax error in SQL statement "REPLACE[*] INTO TYPES (TYPE) VALUES ('expense') "; expected "ROLLBACK, REVOKE, RUNSCRIPT, RELEASE, {"; SQL statement: 
REPLACE INTO types (type) values ('expense') [42001-170] 42001/42001 

Ich habe auch versucht

INSERT IGNORE INTO types (type) values ('expense'); 

und

INSERT INTO types (type) values ('expense') ON DUPLICATE KEY UPDATE type=type; 

ist mir egal, wenn der neue Einsatz überschreibt die alte Daten oder wenn es gerade die neue Einfügung nicht durchführt. Gibt es eine Möglichkeit, dies mit der h2-Datenbank zu tun?

+0

könnten Sie eine 'DROP TABLE IF EXISTS' machen http://www.h2database.com/html/grammar.html#drop_table dann von vorne anfangen? – jchapa

+0

Vielen Dank für den Link zur Grammatik, es sieht so aus, als gäbe es keine Modifikatoren wie die für MySQL auf der Insert-Anweisung: http://www.h2database.com/html/grammar.html#insert. Ich denke nicht, dass ich meinen Tisch fallen lassen werde. – Alison

Antwort

15

Die merge statement sollten Sie erreichen können, was Sie wollen. Ich bin kein Experte für H2, aber ich habe die MERGE-Anweisung in SQL Server mehrmals verwendet und aus dem Aussehen dieser Website sollte es den Trick tun.

Von der Website:

Updates vorhandene Zeilen und Einfügen von Zeilen, die nicht existieren. Wenn keine Schlüsselspalte angegeben ist, werden die Primärschlüsselspalten zum Suchen der Zeile verwendet.

+0

Ja, es funktioniert! MERGE INTO Typen KEY (Typ) VALUES ('type1'); – Alison

Verwandte Themen