Mit Ausnahme von tablediff und powershell, die in den vorherigen Antworten erwähnt wurden, können Sie SQL auch mit der Anweisung UNION ALL verwenden, um die Datensätze zu finden, die nicht in zwei identischen Tabellen übereinstimmen:
SELECT MIN(TableName) AS TableName
,ID
,NAME
,lastname
,Address
,City
FROM (
SELECT 'Table A' AS TableName
,Customers.id
,Customers.NAME
,Customers.lastname
,Customers.Address
,Customers.City
FROM Customers
UNION ALL
SELECT 'Table B' AS TableName
,CustomersOld.id
,CustomersOld.NAME
,CustomersOld.lastname
,CustomersOld.Address
,CustomersOld.City
FROM CustomersOld
) tmp
GROUP BY ID
,NAME
,lastname
,Address
,City
HAVING COUNT(*) = 1
ORDER BY id;
Eine weitere Option, die Sie ausprobieren können, ist die Verwendung von Data Compare in Visual Studio. Es vergleicht Daten in der Quellendatenbank und der Zieldatenbank und erstellt ein Synchronisationsskript für die Tabellen, die Sie für die Synchronisation ausgewählt haben.
Zu guter Letzt können Sie mit dem SQL-Datenvergleichstool - ApexSQL Data Diff - alle Synchronisationsoptionen festlegen, die Tabellen und Spalten mit unterschiedlichen Namen zuordnen und Ihre eigenen Schlüssel für den Vergleich in der GUI erstellen. Sie können festlegen, dass es unbeaufsichtigt ausgeführt wird. Sie müssen lediglich den SQL Server-Auftragsverlauf am Morgen überprüfen. Wenn Sie weitere Informationen zu diesen Optionen benötigen, empfehlen wir Ihnen, diesen Artikel zu lesen: http://solutioncenter.apexsql.com/automatically-compare-and-synchronize-sql-server-data/
Verwenden nativer Tools:
tablediff : Das Dienstprogramm tablediff vergleicht die Daten in der Quelltabelle mit der Tabelle in der Zieltabelle .
powershell: Mit compare-object können Sie das erreichen. Hier ist ein gutes Beispiel
dritte Seite:
Redgate Schema und Daten vergleichen. Sie können sogar Powershell und Schema / Daten-Vergleiche verwenden, um Dinge zu automatisieren.
quelle
Ich habe dieses kürzlich für einen ähnlichen Zweck verwendet:
Es setzt voraus, dass der Primärschlüssel konsistent ist. Aber man muss doch etwas Konsequentes haben. Ein Metaskript zum Generieren von Code wie oben ist relativ einfach zu schreiben und erleichtert den Vergleich von mehrspaltigen Tabellen.
Was die Synchronisation angeht, müssen Sie
source left join target
undtarget left join source
dann entscheiden, was Sie mit dem Ergebnis jedes einzelnen tun möchten.quelle
Dies sollte Ihnen die Unterschiede zwischen den beiden Tabellen geben. Sie können diese dann in eine Einfügeabfrage einbinden, um die Unterschiede von A nach B oder umgekehrt zu setzen.
quelle
Eines unserer kostenlosen Tools verfügt über eine vollständige Oberfläche für TableDiff:
http://nobhillsoft.com/Diana.aspx
Schauen Sie sich auch unser DB-Vergleichstool an. Dies ist der einzige Server, der eine unbegrenzte Datenmenge vergleicht (keiner der anderen kann Millionen und Abermillionen von Datensätzen erstellen) ... solange Sie zwei miteinander verbundene Server vergleichen
http://nobhillsoft.com/NHDBCompare.aspx
(Wir haben andere Links in diesem Thread für Produkte von Drittanbietern gesehen, daher glauben wir, dass es legitim ist, unsere zu erwähnen ... Bitte lassen Sie uns wissen, wenn dies nicht der Fall ist.)
quelle
Wenn beide Tabellen ähnliche Primärschlüssel haben, können Sie die folgende Strategie verwenden, um Quell- und Zieltabellen zu vergleichen: (Ich habe zusammengesetzte Schlüsselspalten mit einem Sternchen markiert.)
Dies funktioniert, weil union implizit unterschiedliche Datensätze zurückgibt. Für eine bestimmte Zeile (identifiziert durch einen Schlüssel) in der Quelle, von der Sie erwarten, dass sie genau mit dem Ziel übereinstimmt, würden Sie also erwarten, dass eine Vereinigung von src und target 1 Zeile für einen bestimmten Schlüssel zurückgibt. Auf diese Weise können Sie mit der oben beschriebenen Strategie herausfinden, welche Schlüssel ein Vereinigungsergebnis mit mehreren Zeilen zurückgeben. Anschließend können Sie das Ziel src union erneut abfragen (diesmal nur die Datensätze mit Unterschieden auswählen, indem Sie mit der Diff-Tabelle verbinden) und alle gewünschten Spalten auswählen Vergleichen Sie, indem Sie nach den Spalten sortieren, aus denen der Schlüssel besteht, und Sie sehen genau, welche Spalten nicht übereinstimmen. Beachten Sie, dass die Spaltennamen in der Quelle und im Ziel nicht übereinstimmen müssen, da sie mithilfe einer "as" -Anweisung miteinander verknüpft werden können.
quelle
Um die Unterschiede zwischen zwei identischen Tabellen zu finden
SELECT *
FROM SOURCE01.dbo.Customers
UNION
SELECT *
FROM TARGET01.dbo.Customers
AUSSER
SELECT *
FROM SOURCE01.dbo.Customers
INTERSECT
SELECT *
FROM TARGET01.dbo.Customers
Die Reihenfolge der Operationen bewirkt, dass zuerst INTERSECT ausgeführt wird, wodurch Sie einen Datensatz erhalten, der nur aus Zeilen besteht, die in beiden Tabellen vorhanden sind. Zweitens wird die UNION ausgeführt, die Ihnen alle Zeilen aus beiden Tabellen ohne Duplikate gibt. Schließlich wird EXCEPT ausgeführt, wodurch der INTERSECT-Datensatz, der die Zeilen in beiden Tabellen darstellt, aus Ihrer UNION (alle Zeilen beider Tabellen) gelöscht wird. Auf diese Weise erhalten Sie ein Dataset, das nur die Zeilen enthält, die in einer der Tabellen vorhanden sind, nicht jedoch in der anderen. Wenn Ihr Dataset wieder leer ist, sind alle Zeilen in den Tabellen gleich.
https://docs.microsoft.com/de-de/sql/t-sql/language-elements/set-operators-except-and-intersect-transact-sql
quelle
Ich hatte ein ähnliches Problem und habe den SQL-Befehl 'EXCEPT' verwendet, um das Problem zu lösen. Der Befehl EXCEPT verwendet zwei SELECT-Anweisungen und gibt die Zeilen zurück, die von der ersten SELECT-Anweisung (links) und nicht von der zweiten SELECT-Anweisung (rechts) zurückgegeben werden.
PS: Das Schema für beide von der SELECT-Anweisung zurückgegebenen Tabellen muss übereinstimmen.
Weitere Informationen finden Sie auf der Seite Tutorials Point hier
quelle
Das Skript vergleicht (sofern mit den relevanten Details versehen) 2 Tabellen (z. B. Kunden auf Server1 mit Kunden auf Server2).
Dieses Skript ist nützlich, wenn Sie eine Tabelle mit vielen Spalten vergleichen, aber Schwierigkeiten haben, die genaue Spalte mit der falschen Zuordnung zu finden.
Ich habe eine Tabelle mit 353 Spalten und musste sie mit einer anderen Tabelle vergleichen und feststellen, dass die Werte nicht übereinstimmen. Dieses Skript hilft Ihnen dabei, das genaue Tupel zu finden.
quelle
Ich denke, Sie sollten xSQL Data Compare ausprobieren , was in Ihrem Fall den Trick macht. Nehmen wir zum Beispiel an, dass Sie angeben
Nachdem Sie die Tabellen verglichen haben, können Sie im Vergleichsergebnis angeben, dass Sie nur die Unterschiede zur linken Tabelle synchronisieren möchten, die ein SQL-Skript zum Einfügen in TARGET01.dbo erzeugen würden. Verwendet alle Zeilen, die nicht in dieser Tabelle enthalten sind, jedoch existieren in SOURCE01.dbo.Customers (Erreichen eines UNION-Ergebnisses ohne Duplikate). Hoffe das hilft!
Offenlegung: Ich bin mit xSQL verbunden.
quelle