2013-03-08 6 views
9

Я использую H2. Я хочу вставить значение в таблицу, если оно не существует. Я создаю таблицу с:Вставить в таблицу h2, если она не существует

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

И я хочу сделать что-то вроде

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

я нашел an example о Replace, что, по-видимому работает для MySQL, но я использую h2. Но я получаю сообщение об ошибке, когда я запускаю это из моей 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 

Я также попытался

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

и

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

Я не волнует, если новая вставка перезаписывает старые данные или если он просто не выполняет новую вставку. Есть ли способ сделать это с помощью базы данных h2?

+0

Вы можете сделать «DROP TABLE IF EXISTS» http://www.h2database.com/html/grammar.html#drop_table, затем начать с нуля? – jchapa

+0

Благодарим вас за ссылку на грамматику, похоже, что нет модификаторов, таких как MySQL для оператора Insert: http://www.h2database.com/html/grammar.html#insert. Хотя я не думаю, что я уронила свой стол. – Alison

ответ

15

merge statement должно позволить вам достичь того, чего вы хотите. Я не эксперт по H2, но я использовал оператор MERGE в SQL Server несколько раз, и из внешнего вида этого сайта он должен сделать трюк.

С сайта:

Статусы существующие строки и вставлять строки, которые не существуют. Если ключевой столбец не указан, столбцы первичного ключа используются для поиска строки.

+0

Да, это работает! MERGE INTO типы KEY (тип) VALUES ('type1'); – Alison

Смежные вопросы