Наскільки великі дані та наскільки швидкі зв’язки між базами даних та між собою (і вами)? Є низка ідей:
Якщо даних досить мало, що це практично, запустіть SELECT * FROM <table> ORDER BY <pk>
кожну БД, збережіть результати на вкладці або файлі з обмеженими комами (не вирівнюйте пробіл, що масово збільшує отриманий розмір файлу) та порівняйте отриманий результат із бажаним типом diff така утиліта, як winmerge. Таким чином ви порівнюєте абсолютно всі дані.
Якщо бази даних можуть бачити один одного (швидше за все, оскільки вони можуть працювати партнерами реплікації), а зв’язок між ними достатньо високий пропускною здатністю і достатньо низькою затримкою, ви можете використовувати функціональний зв’язок сервера (див. Http://msdn.microsoft .com / en-us / library / ms190479.aspx та відповідна документація) для порівняння та порівняння вмісту таблиць у парі SQL-висловлювань (перелічення рядків, у <table>
яких немає однакових рядків, <linked_server>.<db>..<table>
і навпаки) так само, як ви б порівняли зміст двох локальних таблиць. Це потенційно порівняно повільний варіант, але він може бути досить потужним перевіркою для автоматизації.
Якщо вам потрібно використовувати контрольні суми, оскільки ви хочете значно зменшити обсяг даних, які потрібно перенести, використовуйте, HASHBYTES
а не CHECKSUM
сімейство функцій, оскільки ви можете використовувати хеші кращої якості, щоб ви були впевнені, що вони виходять рівними. Це більш інтенсивно процесора, але для великих обсягів даних ви все одно не будете прив'язані до вводу / виводу, тому запас багато циклів (а для невеликих кількостей просто не має значення).
Як середина між порівнянням усіх даних для символу даних та порівнянням єдиної контрольної суми, що охоплює всі дані, ви можете експортувати SELECT <pk>, HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
з кожної бази даних і порівняти ці результати, щоб побачити, чи вони однакові (або SELECT HASHBYTES('SHA1', <all-other-fields-concatenated>) ORDER BY <pk>
зменшити кількість даних) поточний, але наявність ПК у висновку означатиме, що ви можете визначити рядки, які відрізняються, якщо такі є, меншими подальшими запитами). Звичайно, цей останній варіант є безглуздим, якщо дані в середньому рядку менше, ніж отриманий хеш, і в цьому випадку варіант "порівняти все " буде більш ефективним.