UPDATE: Использование Update_Columns() не является ответом на этот вопрос, так как поля могут меняться в порядке, который приведет к поломке триггера (Update_Columns зависит от порядка столбцов).Как определить, какие поля были обновлены в триггере обновления.
ОБНОВЛЕНИЕ 2: Я уже знаю, что таблицы с удаленными и вставленными данными содержат данные. Вопрос заключается в том, как определить, что изменилось без необходимости жестко кодировать имена полей, поскольку имена полей могут измениться или могут быть добавлены поля.
Допустим, у меня есть таблица с тремя полями.
Строка уже существует, и теперь пользователь обновляет поля 1 и 2.
Как определить, в Trigger Update, какие поля были обновлены, и то, что до и после значений, где?
Я хочу затем записать их в журнальный стол. Если было обновлено два поля, это должно привести к двум строкам в таблице истории.
Table
Id intField1 charField2 dateField3
7 3 Fred 1995-03-05
Updated To
7 3 Freddy 1995-05-06
History Table
_____________
Id IdOfRowThatWasUpdated BeforeValue AfterValue (as string)
1 7 Fred Freddy
2 7 1995-03-05 1995-05-06
Я знаю, что я могу использовать Deleted таблицу, чтобы получить старые значения и вставленная таблицы, чтобы получить новые значения. Однако вопрос заключается в том, как сделать это динамически. Другими словами, фактическая таблица имеет 50 столбцов, и я не хочу жестко кодировать 50 полей в инструкцию SQL, а также, если поля меняются и не хотят беспокоиться о том, чтобы синхронизировать SQL с изменения таблицы.
Грег
возможно дубликат [SQL для обнаружения полей измененных в триггер обновления (SQL Server 2005)?] (Http://stackoverflow.com/questions/434842/sql-to-detect- fields-modified-in-update-trigger-sql-server-2005) –
@HamletHakobyan Вопрос другой: мой вопрос в том, как «динамически» определять, какие поля изменены. –
'поскольку поля могут меняться в порядке' Вы хотите сказать, что вы измените свою схему? Вы можете изменить триггер. Кроме того, можно легко перенести порядковое имя для названия. –