Angenommen, ich habe eine Tabelle mit einem Identitätsfeld. Ich möchte einen Datensatz darin einfügen, wenn es nicht bereits existiert. Im folgenden Beispiel überprüfe ich, ob der in @ Field1 gespeicherte Wert bereits in der Tabelle existiert. Falls nicht, füge ich einen neuen Rekord:Wie erhalten Sie den Identitätswert nach der Verwendung von MERGE, wenn es eine Übereinstimmung gibt?
Definition der Tabelle:
MyTable (MyTableId int Identity not null, Field1 int not null, Field2 int not null)
Dies ist, wie ich überprüfen, ob bereits der Wert vorhanden ist, und legen Sie es dann notwendig, wenn
merge MyTable as t
using (@Field1, @Field2) as s (Field1,Field2)
on (t.Field1=s.Field1)
when not matched then
insert (Field1,Field2) values (s.Field1,s.Field2);
Abrufen der Identität Wert, wenn der Datensatz noch nicht in der Tabelle vorhanden ist, kann durch Hinzufügen von hinzugefügt werden:
aber was ist, wenn der Rekord schon in der Tabelle war (dh wenn es ein Match gab)?
Der einzige Weg, ich ist gefunden die Tabelle abzufragen, nachdem die Merge-Anweisung ausführen:
select MyTableId from MyTable where [email protected]
Gibt es eine Möglichkeit, die Identität Wert direkt aus dem Merge zu bekommen?
Danke Adrian, aber wenn es "keine Übereinstimmung" gibt, wie erhalten Sie den neuen Identitätswert in @MatchedId? – Anthony
Danke für das Update. Ja, das würde funktionieren, aber es sieht so aus, als wäre es viel mehr Code als nur "wähle MyTableId von MyTable, wobei Field1 = @ Field1" nach dem Merge (offensichtlich hängt es von der Größe der realen Tabelle usw. ab).Ich hatte nur gehofft, dass es in der Merge-Anweisung eine 'eingebaute' Lösung gab, die den Identitätswert in beiden Fällen zurückgab (übereinstimmend oder nicht übereinstimmend). – Anthony