Когда происходит DML, как войти в другую таблицу, какие столбцы затронуты, старое значение и новое значение для каждой записи в SQL Server 2008 SE? - PullRequest
0 голосов
/ 23 сентября 2018

Каждый раз, когда возникает этот вопрос, я чувствую, что иду по кроличьей норе с различными решениями и методами, но в конце концов, я не уверен, что на самом деле использовать.Каждое решение заканчивается комментариями внизу с указанием, почему не правильно или почему это опасно.

Я думал, что CDC будет ответом, который я искал, но потом я узнал, что наша версия - SE, и она не поддерживается.

Так что, я думаю, я добавлю к другим многочисленным вопросам, заданным наэта тема в надежде, что я смогу найти решение для своих нужд.

Вот что я пытаюсь получить:

У меня есть таблица этой формы:

| Item | F1 | F2 | F3 | F4 | ... | F30 | 

Эта таблица может быть изменена с помощью INSERT, UPDATE или DELETE.

Я хочу записать любые действия DML в таблицу этой формы:

| TimeStamp | Action | Item | Column Affected | Old Value | New Value |

Одна из критических замечаний, которые я наткнулся на ведение журнала на основе триггера, заключалась в том, что они не сделали его «основанным».В качестве примера для DML, которые имеют пакеты изменений по сравнению с простыми однострочными операторами.В моем случае я точно знаю, что операторы DML всегда имеют форму: (Всегда отдельный оператор DML для любого элемента и очень специфический для какого столбца.)

[DML_Command] [Table_Name] SET [Column_Name] = [Value] WHERE [Item] = 'Unique_Item_Name'
Ex. UPDATE Item_tbl SET F3 = 620 WHERE Item = 'Unique_Item_Name'

Так что я надеюсь, что еслиПри выполнении оператора обновления, подобного описанному выше, я получаю новую запись или строку в таблице ведения журнала, например:

| TimeStamp | Action | Item | Column Affected | Old Value | New Value |
| 9/25/2018 2:02:00:00 PM | 'Update' | 'Unique_Item_Name' | 'F3' | NULL | 620 |

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

Буду признателен за любой вклад по этому вопросу.Даже толчок в правильном направлении поможет.Спасибо за ваше время!

...