2013-03-08 20 views
9

Używam H2. Chcę wstawić wartość do tabeli, jeśli nie istnieje. I utworzyć tabelę z:Wstaw do tabeli h2, jeśli nie istnieje

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

I chcę coś zrobić jak

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

znalazłem an example o Wymienić że najwyraźniej działa na MySQL ale używam H2. Ale pojawia się błąd, gdy uruchomię to z mojej konsoli H2:

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 

Próbowałem też

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

i

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

I nie obchodzi mnie, czy nowa wkładka nadpisuje stare dane lub jeśli po prostu nie wykonuje nowej wstawki. Czy jest sposób na to zrobić z bazą danych h2?

+0

Czy możesz zrobić "DROP TABLE IF IF EXISTS" http://www.h2database.com/html/grammar.html#drop_table, a następnie zacząć od zera? – jchapa

+0

Dziękuję za link do gramatyki, wygląda na to, że nie ma żadnych modyfikatorów, takich jak dla MySQL w instrukcji Insert: http://www.h2database.com/html/grammar.html#insert. Nie sądzę jednak, abym zrzucił mój stół. – Alison

Odpowiedz

15

Dzięki merge statement możesz osiągnąć to, co chcesz. Nie jestem ekspertem w H2, ale użyłem oświadczenia MERGE w Serwerze SQL kilka razy i na podstawie wyglądu tej strony powinno wystarczyć.

ze strony:

Aktualizacje istniejących wierszy i wstawić wiersze, które nie istnieją. Jeśli żadna kolumna klucza nie zostanie określona, ​​kolumny klucza głównego zostaną użyte do znalezienia wiersza.

+0

Tak, to działa! MERGE INTO typy KLUCZ (typ) WARTOŚCI ("typ1"); – Alison

Powiązane problemy