2017-10-18 5 views
-1

Kann mir jemand bitte dabei helfen? Ich bin keineswegs ein MSSQL-Experte und muss diese einmalige Abfrage erstellen, um irgendeine Art von Tabellensynchronisation durchzuführen.MSSQL Abfrage zum Vergleichen und Kopieren (Synchronisieren) von Werten aus einer Spalte/Tabelle mit einer anderen

Ich bin auf der Suche nach einer Möglichkeit, einen Wert aus einer Spalte in Tabelle A in eine andere Spalte zu kopieren in Tabelle B, basierend auf der Bedingung, dass der Wert in Spalte B noch nicht existiert. Und auch Werte aus Tabelle B entfernen, wenn sie in Tabelle A nicht vorhanden sind (wiederum für dieselbe Spalte).

Ich habe zwei Tabellen, die wie diese aussehen (keine Inline-Posting von Bildern noch):

dbo.EM_T_USERS

enter image description here

dbo.em_T_PRESENCE_USER_CONFIG

enter image description here

Wenn Sie benötigen weitere Informationen zu beantworten, lassen Sie es mich wissen ...

Rgds,

David

  • bearbeiten - added Bilder zur Darstellung der Tabellen
+2

könnten Sie reflektieren Bitte teilen Sie einige Beispiel-SQL oder zeichnen Sie einfach einige Tabellen mit einigen Beispieldatensätzen, die Ihre Anforderungen zeigt? –

+0

danke, ich habe einige Beispiel-Screenshots hinzugefügt –

Antwort

0

Hier ist die Lösung, die Sie suchen:

DECLARE @Target TABLE (EmployeeID INT PRIMARY KEY, EmployeeName VARCHAR(10)) 

DECLARE @Source TABLE(EmployeeID INT PRIMARY KEY, EmployeeName VARCHAR(10)); 


INSERT @Target(EmployeeID, EmployeeName) VALUES(100, 'Mary'); 
INSERT @Target(EmployeeID, EmployeeName) VALUES(101, 'Sara'); 
INSERT @Target(EmployeeID, EmployeeName) VALUES(102, 'Stefano'); 


INSERT @Source(EmployeeID, EmployeeName) Values(103, 'Bob'); 
INSERT @Source(EmployeeID, EmployeeName) Values(104, 'Steve'); 
INSERT @Source(EmployeeID, EmployeeName) Values(105, 'Sara'); 



MERGE @Target AS T 
USING @Source AS S 
ON (T.EmployeeID = S.EmployeeID) 
WHEN NOT MATCHED BY TARGET AND S.EmployeeName LIKE 'S%' 
    THEN INSERT(EmployeeID, EmployeeName) VALUES(S.EmployeeID, S.EmployeeName) 
WHEN MATCHED 
    THEN UPDATE SET T.EmployeeName = S.EmployeeName 
WHEN NOT MATCHED BY SOURCE AND T.EmployeeName LIKE 'S%' 
    THEN DELETE 
OUTPUT $action, inserted.*, deleted.*; 

SELECT * FROM @Target 
0

Dank Für alle Tipps und Einsichten habe ich jedoch eine Lösung gefunden, Tigger aufzubauen Hut, wenn eine Tabelle ändert, wird es diese Änderungen in Tabelle B Obviuously Ich habe nicht bauen diejenigen löst mich, ich habe etwas Hilfe von einem meiner Kollegen hatte ..

Rgds, David

Verwandte Themen