Сравните две записи в двух таблицах в триггере SQL Server 2005 - PullRequest
0 голосов
/ 14 декабря 2010

Я хочу, чтобы, если таблицы DELETED и INSERTED имели одинаковую запись, я не буду обновлять другую таблицу. поэтому, пожалуйста, скажите мне, как я могу сравнить две строки в двух разных таблицах DELETED и INSERTED, имеющих одинаковую структуру.

Пожалуйста, помогите мне с примером кода.

спасибо

1 Ответ

3 голосов
/ 14 декабря 2010

Вы должны проверить каждый столбец

INSERT OtherTable (keycol, col1, col2, ...)
SELECT
     I.keycol, I.Col1, I.Col2, ..
FROM
     INSERTED I
     JOIN
     DELETED D On I.keycol = D.keycol
WHERE
     I.col1 <> I.col1
     OR
     I.col2 <> I.col2
     OR
     ISNULL(I.col3, 0) <> ISNULL(I.col3, 0) --nullable columns
     OR
     ...

Вы также можете использовать ХАШБИТЫ

INSERT ...
SELECT
     I.keycol, I.Col1, I.Col2, ..
FROM
     INSERTED I
     JOIN
     DELETED D On I.keycol = D.keycol
WHERE
     HashBytes('SHA1', CAST(I.col1 AS nvarchar) + I.col2 + etc)
     <>
     HashBytes('SHA1', CAST(D.col1 AS nvarchar) + D.col2 + etc)

Не на 100% надежно, используйте CHECKSUM

INSERT ...
SELECT
     I.keycol, I.Col1, I.Col2, ..
FROM
     INSERTED I
     JOIN
     DELETED D On I.keycol = D.keycol
WHERE
     CHECKSUM(I.*) <> CHECKSUM(D.*)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...