2016-03-31 2 views
0

Я использую базу данных файлов H2, и я столкнулся с следующей проблемой. Предположим, у меня есть таблица под названием PROPERTIES с двумя столбцами VARCHAR (255): NAME и VALUE, причем NAME является основным ключом. Теперь я хотел бы обновить таблицу новой строкой, только если она не существует. Если он существует, я не хочу изменять значение VALUE для этого NAME. Это было бы легко сказать MS SQL Server, но H2 SQL не имеет IF, WHERE NOT EXISTS. У него есть команда под названием MERGE, но она обновляется, если существует. Есть ли способ сделать это с помощью H2 SQL?
Я не верю, что этот вопрос является дубликатом, потому что я не видел его специально для H2.H2 insert row only if не существует

+0

Кажется, вы можете использовать 'где не exists' Н2 http://stackoverflow.com/questions/19768051/h2-sql-database-insert-if-the-record-does-not-exist –

+0

На самом деле это не работает для меня. Кажется, вы не можете использовать WHERE NOT EXISTS в H2. Я использую SQuirrel 3.6 для запуска запроса (драйвер H2 - h2-1.4.187) –

ответ

0

Я не знаком с H2, но если «где не существует» не работает, как насчет проверки того, что новое значение уже существует и вставляется, только если это не так?

Это пример SQL Server, поэтому вам может потребоваться изменить синтаксис.

Insert into Properties 
(Name, Value) 
source.Newname, source.NewValue 
from Source 
where NewName 
not in (
select Name 
from Properties 
) 
; 
+0

Спасибо, но ваш код, кажется, вставляет из другой таблицы. Мне нужно иметь возможность вставлять постоянные значения непосредственно в таблицу. Как я могу заполнить источник? –

+0

Как вы относитесь к значениям? Используем переменные? С помощью переменных вы можете удалить предложение «из источника» и заменить значения столбца NewName и NewValue на переменные. – Adam

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