Как убедиться, что исходная и целевая таблицы имеют одинаковое количество записей после изменения? Как синхронизировать?

#sql #sql-server #tsql #sql-server-2012

Вопрос:

Я копирую данные из одной базы данных в другую, используя аналогичные таблицы Insert....select .

Теперь все в порядке, но если исходная база данных что-то отредактировала, и я хочу, чтобы это было обновлено в таблице целевой базы данных, то это будет проблемой.

У меня есть несколько решений:

  1. Если запись существует (будет проверяться с помощью идентификатора GUID, который у нас есть), затем удалите ее и ее дочерние данные и вставьте все снова, следовательно, новые обновленные данные.
  2. Принимая во внимание объединение таблиц
     SELECT * FROM SourceDb.dbo.Table1 UNION SELECT * FROM TargetDb.dbo.Table2  

Если вы получаете записи, превышающие любую из двух таблиц, они не содержат одинаковых данных и их необходимо удалить и добавить повторно.

Но проблема в том, что у меня около 1 родительской и около 7 дочерних таблиц, поэтому для взятия и проверки с помощью union мне потребуется дополнительное кодирование.

что мне делать?

Ответ №1:

Общий запрос для проверки того, что набор A = набор B является :

 A - B U B - A = ∅ (set theory)  

Вы можете использовать приведенный выше запрос :

 WITH TA AS (SELECT * FROM databaseA.SchemaA.TableA), TB AS (SELECT * FROM databaseB.SchemaB.TableB) SELECT * FROM TA EXCEPT SELECT * FROM TB UNION ALL SELECT * FROM TB EXCEPT SELECT * FROM TA;  

Комментарии:

1. Двойное исключение-это так здорово и полезно. Я нахожу except , как правило, недооцененным.