Кроме tablediff и powershell, упомянутых в предыдущих ответах, вы также можете использовать SQL с оператором UNION ALL, чтобы найти записи, которые не совпадают в 2 идентичных таблицах:
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;
Другой вариант, который вы можете попробовать - использовать Data Compare в самой Visual Studio. Он сравнивает данные в исходной базе данных и целевой базе данных и создает сценарий синхронизации для таблиц, выбранных для синхронизации.
И, наконец, что не менее важно , вы можете использовать инструмент сравнения данных SQL - ApexSQL Data Diff , чтобы установить все параметры синхронизации, сопоставить таблицы и столбцы с разными именами, создать свои собственные ключи для сравнения в графическом интерфейсе. Вы можете запланировать его запуск без присмотра, и все, что вам нужно сделать, это проверить историю заданий SQL Server утром. Если вам нужны дополнительные сведения об этих параметрах, я рекомендую прочитать эту статью: http://solutioncenter.apexsql.com/automatics-compare-and-synchronize-sql-server-data/
Использование нативных инструментов:
tablediff : утилита tablediff сравнивает данные в исходной таблице с таблицей в целевой таблице.
powershell: сравнить объект позволяет вам достичь этого. вот хороший пример
третья сторона:
Redgate схема и сравнение данных. Вы даже можете использовать powershell и схемы / данные сравнения для автоматизации вещей.
источник
Я использовал этот недавно для аналогичной цели:
Он полагается на согласованность первичного ключа. Но вы должны иметь что-то последовательное в конце концов. Мета-сценарий для генерации кода, подобного описанному выше, относительно прост в написании и позволяет легко сравнивать таблицы с несколькими столбцами.
Что касается синхронизации, вам нужно будет
source left join target
иtarget left join source
затем решить, что вы хотите сделать с результатом каждого.источник
Это должно дать вам различия между двумя таблицами, затем вы можете заключить это в запрос вставки, чтобы поместить различия из A в B или наоборот.
источник
Один из наших бесплатных инструментов имеет полный интерфейс для TableDiff:
http://nobhillsoft.com/Diana.aspx
Кроме того, проверьте наш инструмент сравнения БД. Это единственный, который сравнивает неограниченное количество данных (ни один из других не может сделать миллионы и миллионы записей) ... при условии, что вы сравниваете два связанных сервера
http://nobhillsoft.com/NHDBCompare.aspx
(мы видели другие ссылки в этой теме на сторонние продукты, поэтому мы считаем, что стоит упоминать наши ... пожалуйста, дайте нам знать, если это не так)
источник
Если обе таблицы имеют одинаковые первичные ключи, вы можете использовать приведенную ниже стратегию для сравнения исходной и целевой таблиц: (я пометил столбцы составного ключа звездочкой)
Это работает, потому что union неявно возвращает разные записи. Таким образом, для любой данной строки (идентифицируемой некоторым ключом) в источнике, который вы ожидаете, точно совпадет с целью, вы ожидаете, что объединение src и target возвратит 1 строку для любого данного ключа. Таким образом, вы можете использовать приведенную выше стратегию, чтобы выяснить, какие ключи возвращают результат объединения с несколькими строками, а затем снова запросить цель объединения src (на этот раз только выбирая записи, имеющие различия, соединяясь с таблицей diff), выбирая все столбцы, которые вы хотите сравните, упорядочив по столбцам, составляющим ключ, и вы увидите, какие именно столбцы не совпадают. Обратите внимание, что имена столбцов в источнике и цели не обязательно должны совпадать, так как они могут быть связаны друг с другом с помощью оператора «как».
источник
Для того, чтобы найти различия между двумя одинаковыми таблицами
SELECT *
FROM SOURCE01.dbo.Customers
UNION
SELECT *
FROM TARGET01.dbo.Customers
КРОМЕ
SELECT *
FROM SOURCE01.dbo.Customers
INTERSECT
SELECT *
FROM TARGET01.dbo.Customers
Порядок операций приводит к тому, что сначала выполняется INTERSECT, что даст вам набор данных только из строк, которые существуют в обеих таблицах. Во-вторых, выполняется UNION, который дает вам все строки из обеих таблиц без дубликатов. Наконец, выполняется EXCEPT, который удаляет из вашего UNION (все строки обеих таблиц) набор данных INTERSECT, который является строками в обеих таблицах. Это оставляет вам набор данных, содержащий только те строки, которые существуют в одной из таблиц, но отсутствуют в другой. Если ваш набор данных возвращается пустым, то между таблицами все строки одинаковы.
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/set-operators-except-and-intersect-transact-sql
источник
У меня была похожая проблема, и я использовал команду SQL EXCEPT для ее решения. Команда EXCEPT принимает два оператора SELECT и возвращает строки, которые возвращаются первым оператором SELECT (слева), а не вторым (правым) оператором SELECT.
PS: схема для обеих таблиц, возвращаемых оператором SELECT, должна совпадать.
Для большей наглядности посетите страницу учебных пособий здесь
источник
Сценарий (если он предоставлен с соответствующими подробностями) сравнивает 2 таблицы (скажем, Клиенты на сервере1 и Клиенты на сервере2).
Этот сценарий будет полезен, если вы сравниваете таблицу со многими столбцами, но изо всех сил пытаетесь найти точный несоответствующий столбец.
У меня есть таблица с 353 столбцами, и мне пришлось сравнить ее с другой таблицей и найти значения, которые не совпадают, и этот скрипт поможет вам найти точный кортеж.
источник
Я думаю, что вы должны попробовать xSQL Data Compare , который поможет вам в вашем случае. Скажем, например, что вы указываете
После сравнения таблиц в результате сравнения вы можете указать, что вы хотите синхронизировать только отличия от левой таблицы, что приведет к созданию сценария SQL для вставки в TARGET01.dbo.Customers всех строк, которых нет в этой таблице, но существует в SOURCE01.dbo.Customers (достижение результата UNION без дубликатов). Надеюсь это поможет!
Раскрытие информации: я связан с xSQL.
источник