Я хочу найти новые, измененные и удаленные записи в одной таблице (tableA), сравнив ее с другой таблицей (tableB). Обе таблицы имеют одну и ту же схему и имеют уникальное поле идентификатора.Найти измененные/новые/удаленные записи между двумя таблицами
В моей ситуации tableA первоначально совпадает с таблицей B, но он был отредактирован какой-либо внешней организацией, и как только они сделали свои изменения, они отправляют таблицу обратно через ZIP-файл, и мы повторно заполняем (усекаем и вставляем), что данные на tableA. Поэтому я хочу узнать, какие записи изменились в tableA. Я использую SQL Server 2012.
я могу получить новые и измененные записи с «исключением» ключевое слово:
select * from tableA
except
select * form tableB
(Давайте называть полученные результаты ResultsA)
можно также получить удаленные и модифицированные записей:
select * from tableB
except
select * form tableA
(Давайте называть полученные результаты ResultsB)
Проблема заключается в том, что как ResultsA, так и ResultsB имеют те же записи, которые были изменены/отредактированы. Таким образом, измененные/отредактированные записи удваиваются. Я могу использовать внутреннее соединение или пересекаться на ResultsA и ResultsB, чтобы получить только измененные записи (назовите это results ResultsC). Но тогда мне нужно будет использовать join/except снова между ResultsA и ResultsC, чтобы получить только новые записи и снова присоединить/исключить между результатами B и ResultsC, чтобы получить только удаленные записей ... Я пробовал this и this, но они не работают для меня.
Очевидно, что это не хорошо. Есть ли какие-либо изящные и более простые способы узнать записи, которые были удалены, изменены или добавлены в tableA по сравнению с tableB?
Это сработало для меня, спасибо. – henry000