Ich versuche, Daten von einem System in ein anderes einzufügen, so dass ich eine Zwischenzuordnungstabelle behalten, um die IDs von alten und neuen Tabelle zu behalten. KontoMERGE-Anweisung mit OUTPUT mit WHERE-Bedingung
ich einen MERGE
Zustand bin mit, ist es eine Möglichkeit zu
DECLARE @TenantId INT = 1
MERGE dbo.[Account] AS t
USING (SELECT m.[AccountId],
m.[TenantId],
a.[ID_Account],
a.[Account_No],
a.[Account_Name],
FROM [Client1].dbo.[Account] a
LEFT JOIN migration.[Account] m ON m.[ID_Account] = a.[ID_Account] AND m.[TenantId] = @TenantId
) AS s
ON (t.[AccountId] = s.[AccountId] AND t.[TenantId] = s.[TenantId])
WHEN NOT MATCHED THEN
INSERT ([TenantId], [Number], [Name], [Active])
VALUES (@TenantId, s.[Account_No], s.[Account_Name], 1)
OUTPUT @TenantId, inserted.[AccountId], s.[ID_Account] INTO migration.[Account];
Das ist in Ordnung, aber wenn ich versuche, es ein zweites Mal ausführen, werden die Datensätze eingefügt wieder auf meiner Migration. [ ] Tabelle, die wiederholte Daten enthält. Gibt es eine Möglichkeit, eine Bedingung auf die Ausgabe zu setzen?
Können Sie einige Beispieldaten zeigen, a * komplette * 'MERGE' Aussage, und erklären, wie man die Dinge erwarten, wenn die Arbeit Sie führen diese Zusammenführung zweimal aus? –
Wenn du Duplikate erhältst, klingt es so, als ob die Bedingung (en) von 'MERGE' die Datensätze nicht korrekt identifizieren, wenn sie übereinstimmen und wenn sie nicht übereinstimmen. Ohne etwas anderes spezifiziert zu sein, ist das "NOT MATCHED" dasselbe wie das "NOT MATCHED BY TARGET". – Steven
Bin ich richtig, dass die "echte" Zieltabelle gut funktioniert und nur die "historische" Tabelle - um Ihre Änderungen zu verfolgen - Duplikate hat? In diesem Fall könnte es eine Möglichkeit geben, einen Trigger auf diese Tabelle zu setzen ... – Tyron78