Ich habe einen Tabellentest mit Spalten-ID, die den Primärschlüssel und automatisch erhöht und benennt. Ich möchte nur dann einen neuen Datensatz einfügen, wenn keine Datensätze vorhanden sind. Zum Beispiel
Eingabe ist id = 30122 und name = john
Wenn es Datensätze mit der ID 30122 gibt, habe ich die Namensspalte auf John aktualisiert. Wenn es keine Datensätze gibt, habe ich einen neuen Datensatz eingefügt.
Ich kann mit 2 Abfragen wie
select * from test where id=30122
wenn es einige aufzeichnungen hat dann kann ich verwenden update test set name='john' where id=3012
oder wenn es keine aufzeichnungen gibt dann kann ich verwenden
insert into test(name) values('john')
Aber ich wollte eine einzelne Abfrage verwenden?
Kann jemand sagen, ob es möglich ist?
sql-server
merge
upsert
SpringLearner
quelle
quelle
But I wanted to use single query?
Warum?MERGE
in keiner Version wählen , auch nicht SQL Server 2019. Einige Hintergründe dazu hier .Antworten:
Sie können dies versuchen
Ein anderer Ansatz für eine bessere Leistung ist
und lesen Sie auch diese schlechten Gewohnheiten, um auf Schema-Präfix zu treten
quelle
Unter der Annahme von SQL Server 2008 oder höher können Sie Folgendes verwenden
MERGE
:Tabelle
Abfrage
Der
SERIALIZABLE
Hinweis ist für den korrekten Betrieb bei hoher Parallelität erforderlich .Einen Vergleich der gängigen Methoden von Michael J. Swart finden Sie hier:
Mythbusting: Concurrent Update / Insert Solutions
quelle