Selain tablediff dan PowerShell yang disebutkan dalam jawaban sebelumnya, Anda juga dapat menggunakan SQL dengan pernyataan UNION ALL untuk menemukan catatan yang tidak cocok dalam 2 tabel identik:
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;
Opsi lain yang bisa Anda coba adalah menggunakan Data Compare di Visual Studio itu sendiri. Ini membandingkan data dalam database sumber dan database target dan membuat skrip sinkronisasi untuk tabel yang Anda pilih untuk sinkronisasi.
Dan yang terakhir, namun tidak kalah pentingnya, Anda dapat menggunakan alat perbandingan data SQL - ApexSQL Data Diff , untuk mengatur semua opsi sinkronisasi, memetakan tabel dan kolom dengan nama yang berbeda, membuat kunci Anda sendiri untuk perbandingan di GUI. Anda dapat menjadwalkannya untuk berjalan tanpa pengawasan dan yang harus Anda lakukan adalah memeriksa riwayat pekerjaan SQL Server di pagi hari. Jika Anda memerlukan detail lebih lanjut mengenai opsi ini, saya sarankan membaca artikel ini: http://solutioncenter.apexsql.com/automatically-compare-and-synchronize-sql-server-data/
Menggunakan alat Asli:
tablediff : utilitas tablediff membandingkan data di tabel sumber dengan tabel di tabel tujuan.
PowerShell: Membandingkan objek memungkinkan Anda untuk mencapai itu. ini adalah contoh yang bagus
pihak ketiga:
skema redgate dan perbandingan data. Anda bahkan dapat menggunakan PowerShell dan skema / data dibandingkan untuk mengotomatisasi sesuatu.
sumber
Saya menggunakan ini baru-baru ini untuk tujuan yang sama:
Itu bergantung pada kunci utama yang konsisten. Tetapi Anda harus memiliki sesuatu yang konsisten. Sebuah skrip meta untuk menghasilkan kode seperti di atas relatif mudah untuk ditulis dan membuat banyak tabel kolom mudah untuk dibandingkan.
Sedangkan untuk sinkronisasi Anda harus
source left join target
dantarget left join source
, kemudian memutuskan apa yang ingin Anda lakukan dengan hasil masing-masing.sumber
Ini akan memberi Anda perbedaan antara dua tabel, Anda kemudian dapat membungkus ini dalam permintaan memasukkan untuk menempatkan perbedaan dari A ke B atau sebaliknya.
sumber
Salah satu alat gratis kami memiliki antarmuka lengkap untuk TableDiff:
http://nobhillsoft.com/Diana.aspx
Juga, periksa alat Perbandingan DB kami. Itu satu-satunya di luar sana yang membandingkan jumlah data yang tidak terbatas (selain yang lain dapat melakukan jutaan dan jutaan rekaman) ... selama Anda membandingkan antara 2 server yang ditautkan
http://nobhillsoft.com/NHDBCompare.aspx
(kami melihat tautan lain di utas ini untuk produk pihak ke-3 jadi kami yakin sah untuk menyebutkan milik kami ... mohon beri tahu kami jika tidak)
sumber
Jika kedua tabel memiliki kunci utama yang mirip, Anda dapat menggunakan strategi di bawah ini untuk membandingkan tabel sumber dan target: (Saya menandai kolom kunci komposit dengan asterik)
Ini berfungsi karena serikat secara implisit mengembalikan catatan yang berbeda. Jadi untuk setiap baris yang diberikan (diidentifikasi oleh beberapa kunci) di sumber yang Anda harapkan cocok dengan tepat di target, Anda akan mengharapkan penyatuan src dan target untuk mengembalikan 1 baris untuk kunci yang diberikan. Dengan demikian Anda dapat menggunakan strategi di atas untuk mengetahui kunci mana yang mengembalikan hasil gabungan yang memiliki beberapa baris, lalu kueri lagi target serikat src, (kali ini hanya memilih catatan yang memiliki perbedaan dengan bergabung dengan tabel diff) memilih semua kolom yang ingin Anda membandingkan, memesan dengan kolom yang menyusun kunci, dan Anda akan melihat kolom mana yang tidak cocok. Catat nama kolom dalam sumber dan target tidak perlu cocok, karena mereka dapat alias satu sama lain menggunakan pernyataan "sebagai".
sumber
Untuk menemukan perbedaan antara dua tabel yang identik
SELECT *
FROM SOURCE01.dbo.Customers
UNION
SELECT *
FROM TARGET01.dbo.Customers
KECUALI
SELECT *
FROM SOURCE01.dbo.Customers
INTERSECT
SELECT *
FROM TARGET01.dbo.Customers
Urutan operasi menyebabkan INTERSECT dilakukan terlebih dahulu yang akan memberi Anda dataset hanya baris yang ada di kedua tabel. Kedua, UNION dilakukan yang memberi Anda semua baris dari kedua tabel tanpa duplikat. Akhirnya, KECUALI dilakukan yang menghapus UNION Anda (semua baris dari kedua tabel) dataset INTERSECT yang merupakan baris di kedua tabel. Ini memberi Anda dataset yang hanya berisi baris yang ada di salah satu tabel tetapi tidak di yang lain. Jika dataset Anda kembali kosong maka semua baris adalah sama antara tabel.
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/set-operators-except-and-intersect-transact-sql
sumber
Saya memiliki masalah yang sama dan menggunakan perintah SQL 'KECUALI' untuk menyelesaikan masalah. Perintah KECUALI mengambil dua pernyataan SELECT dan mengembalikan baris yang dikembalikan oleh pernyataan SELECT pertama (kiri) dan bukan oleh pernyataan SELECT kedua (kanan).
PS: Skema untuk kedua tabel yang dikembalikan oleh pernyataan SELECT harus cocok.
Untuk lebih jelasnya, kunjungi: Halaman Poin Tutorial di sini
sumber
Skrip (bila diberikan dengan detail yang relevan) membandingkan 2 tabel (mis. Pelanggan di server1 ke Pelanggan di Server2).
Script ini akan berguna jika Anda membandingkan tabel dengan banyak kolom tetapi berjuang untuk menemukan kolom ketidakcocokan yang tepat.
Saya memiliki tabel dengan 353 kolom dan saya harus membandingkannya dengan tabel lain dan menemukan dengan nilai tidak cocok dan skrip ini akan membantu Anda menemukan tuple yang tepat.
sumber
Saya pikir Anda harus mencoba xSQL Data Compare , yang akan melakukan trik dalam kasus Anda. Katakanlah misalnya, yang Anda tentukan
Setelah Anda membandingkan tabel, dalam hasil perbandingan, Anda dapat menentukan bahwa Anda hanya ingin menyinkronkan perbedaan dari tabel kiri yang akan menghasilkan skrip SQL untuk dimasukkan ke TARGET01.dbo.Pelanggan semua baris yang tidak ada dalam tabel ini tetapi ada di SOURCE01.dbo.Customers (Mencapai hasil UNION tanpa duplikat). Semoga ini membantu!
Pengungkapan: Saya berafiliasi dengan xSQL.
sumber