Как различать события update, delete и insert в sql после использования команды except в результирующем наборе?

У меня есть 2 таблицы для сравнения. Я делаю это через кроме команды. Как узнать, сгенерирован ли вывод обновления, вставки или удаления

1 ответ

  1. Попробуйте использовать полное внешнее соединение вместо EXCEPT для сравнения двух таблиц и поиска вставленных или обновленных записей.

    В приведенном ниже примере я предполагаю, что обе таблицы имеют одинаковую структуру столбцов и содержат первичный ключ.

    SELECT  CASE
                WHEN T1.PK IS NULL THEN 'Records only in 2nd table'
                WHEN T2.PK IS NULL THEN 'Records only in 1st table'
                WHEN T1.PK=T2.PK AND (ISNULL(T1.Column1,'')<>ISNULL(T2.Column1,'') OR ISNULL(T1.Column2,'')<>ISNULL(T2.Column2,'') OR ...) THEN 'Records updated'
                ELSE 'Records in both table are indentical'
            END,
            T1.*,
            T2.*
    FROM Table1 AS T1
    FULl OUTER JOIN Table2 AS T2 ON  T1.PK=T2.PK;