|
283 / 262 / 32
Регистрация: 11.11.2009
Сообщений: 605
|
|||||||||||
Замена Change Data Capture28.07.2010, 01:34. Показов 3816. Ответов 5
Метки нет (Все метки)
У меня стоит MS SQL Server 2008 Standard Edition.
Мне нужно для нескольких таблиц создать data change log - записывать кто, когда и что изменил. Есть в MS SQL Server 2008 такая фича как Change Data Capture. Вроде как понравилась, но проблема в том что она показывает только последнее изменение (чтоб показывало всю историю вроде как нужен Enterprise Edition), плюс мне надо знать какой юзверь это изменение сделал... Думаю что такое делалось и не раз. В итоге думаю, буду делать сам на тригерах. Вопрос такой, так как отслеживать нужно несколько таблиц (может все) хорошо бы создать одну таблицу куда можно было бы сбрасывать изменения для всех таблиц со структурой типа: (TableID, RecordID, ChangeDateTime, UserID, OldValues, NewValues) и на триггере записывать каждую запись из inserted/deleted в эту таблицу. Вопрос - Чтоб не писать тригер для каждой таблицы индивидуально, существует ли хороший/удобный способ собрать (конкатенировать) значения всех полей (скажем в формате CSV) в одну переменную чтоб записать в OldValues или в NewValues? Ссылки на похожие решения? Добавлено через 3 часа 41 минуту Но это не то что хотел, но нашел неплохое решение, чуть подправить и вперед:
0
|
|||||||||||
| 28.07.2010, 01:34 | |
|
Ответы с готовыми решениями:
5
Is it possible to change the default MS SQL data path? K8 NPT Data change...Update new data to DMI DataGrid focus change, selection change |
|
283 / 262 / 32
Регистрация: 11.11.2009
Сообщений: 605
|
|||||||||||
| 29.07.2010, 23:21 [ТС] | |||||||||||
|
Нашел способ сделать так как я хочу - с помощю XML преобразований.
Вот как записать все столбцы одной записи таблицы в одно поле и прочитать обратно как строку
А вот так записать все столбцы нескольких записей таблицы в одно поле и прочитать обратно как строки:
Закончу - поделюсь что получилось...
0
|
|||||||||||
|
Тимуровец
445 / 285 / 50
Регистрация: 10.09.2009
Сообщений: 963
|
|
| 29.07.2010, 23:37 | |
|
Это все конечно здорово и нечто подобное я тоже делал, но я не смог найти приемлимого способа логировать блобы.
0
|
|
|
283 / 262 / 32
Регистрация: 11.11.2009
Сообщений: 605
|
||||||
| 30.07.2010, 00:09 [ТС] | ||||||
|
а вот таблица:
Не проверял, так как в данный момент BLOB-ов нет которых надо отслеживать. Можно тип XML заменить на VARCHAR(MAX) но вряд ли это улучшит ситуацию ![]() я бы блобы игнорировал бы...
0
|
||||||
|
283 / 262 / 32
Регистрация: 11.11.2009
Сообщений: 605
|
||||||||||||||||||||||||||||||||||||
| 05.08.2010, 19:08 [ТС] | ||||||||||||||||||||||||||||||||||||
|
Вот решил поделиться с тем, что у меня получилось.
На мой взгляд получилось довольно элегантно:
Итак, собственно SQL скрипт для создания всех указанных выше объектов
Вот так включаем систему отслеживалиния для любой таблицы:
а так найденную нами строку с изменениями (скажем ID = 10) мы конвертируем XML в табличную форму:
Система получилась универсальной и все работает довольно быстро. Скорость для моих целей меня вполне устраивает, но если понадобится, в будущем для увеличения скорости можно было бы в таблицу изменений tb_secDataTrail добавить поле
Тогда индекс нужно будет подправить как:
Вышеописанное мною найденное решение - абсолютно готовое универсальное решение для любых таблиц и систем - используйте
0
|
||||||||||||||||||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 11.06.2014
Сообщений: 8
|
|
| 05.12.2012, 18:56 | |
|
Здравствуйте. Спасибо автору, хороший пример. А какие манипуляции надо сделать чтобы не потерять при преобразовании в xml текстовую информацию содержащую знаки пробел %, \ /
0
|
|
| 05.12.2012, 18:56 | |
|
Помогаю со студенческими работами здесь
6
Замена данных в Access с использованием master data (или иным способом) Wildcard capture Video capture API
Variadic template lambda capture Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию.
2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
|