2016-03-31 12 views
0

Ich benutze die H2-Datei-Datenbank und ich bin in das folgende Problem läuft. Angenommen, ich habe eine Tabelle namens PROPERTIES mit zwei VARCHAR (255) Spalten: NAME und VALUE, wobei NAME der Primärschlüssel ist. Jetzt möchte ich die Tabelle nur mit einer neuen Zeile aktualisieren, wenn sie nicht existiert. Wenn es existiert, möchte ich den Wert für diesen Namen nicht ändern. Dies wäre beispielsweise für MS SQL Server einfach, aber H2 SQL hat kein IF, WHERE NOT EXISTS. Es hat einen Befehl namens MERGE, der aktualisiert wird, wenn er existiert. Gibt es eine Möglichkeit, dies mit H2 SQL zu tun?
Ich glaube nicht, dass diese Frage ein Duplikat ist, weil ich es nicht speziell für H2 gefragt habe.H2-Zeile nur einfügen, wenn nicht existiert

+0

Es scheint, Sie verwenden können, ', wo nicht mit H2 exists' http://stackoverflow.com/questions/19768051/h2-sql-database-insert-if-the-record-does-not-exist –

+0

Eigentlich funktioniert es nicht für mich. Es scheint nicht, dass Sie WHERE NOT EXISTS in H2 verwenden können. Ich verwende SQuirrel 3.6, um die Abfrage auszuführen (H2-Treiber ist h2-1.4.187) –

Antwort

0

Ich bin nicht vertraut mit H2, aber wenn "wo nicht existiert" nicht funktioniert, wie wäre es zu prüfen, ob der neue Wert bereits existiert und nur einfügen, wenn es nicht tut?

Dies ist ein SQL Server-Beispiel, daher müssen Sie möglicherweise die Syntax ändern.

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

Danke, aber Ihr Code scheint aus einer anderen Tabelle einzufügen. Ich muss in der Lage sein, konstante Werte direkt in die Tabelle einzufügen. Wie würde ich Source füllen? –

+0

Wie gehst du in die Werte? Verwenden wir Variablen? Mit Variablen können Sie die Klausel "from Source" entfernen und die Spaltenwerte NewName und NewValue durch die Variablen ersetzen. – Adam

Verwandte Themen