Показать сообщение отдельно
Старый 03.09.2022, 09:52   #4  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Цитата:
Сообщение от Damn Посмотреть сообщение
1. Если мы хотим логировать update только отдельных полей в CustTable и думаем что в SysDatabaseLog будут появляться записи только при изменении этих полей, то мы ошибаемся. Записи будут появляться при изменении любого поля.
Однако. Я в качестве примера в тексте упомянул CustTable, но оказалось что с ней в пункте 1 нет проблем.
Более детальный анализ показал что ошибка из пункта 1 возникает только в тех таблицах, которые участвуют в наследовании (касается это и "родителей" и "детей"). Конкретно я столкнулся с такой проблемой в таблице DirPerson, которая отнаследована от DirPartyTable.
У таблицы DirPerson (фактически в БД у таблицы DIRPARTYTABLE) код в триггере выглядит так :
X++:
...
    IF (@spLogType = 3 ) --Update
    BEGIN
        INSERT INTO SYSDATABASELOG (NEWDATA, LOGRECID, LOGTYPE, TABLE_, DESCRIPTION, USERNAME, CREATEDBY, CREATEDTRANSACTIONID, DATAAREAID, PARTITION, SEQUENCENUMBER)  
            SELECT '03::' + 					 + 'BirthDay' + ', ÿþ ' +  CONVERT(nvarchar(max), I.BIRTHDAY) + ' ÿþ ' + CONVERT(nvarchar(max), D.BIRTHDAY) + ' ÿþ '
...
А например у таблицы CREDITCARDACCOUNTSETUP код в триггере выглядит так :
X++:
...
    IF (@spLogType = 3 AND ( UPDATE(ConnectorName) OR UPDATE(ConnectorProperties) OR UPDATE(IsTest) ) ) --Update
    BEGIN
        INSERT INTO SYSDATABASELOG (NEWDATA, LOGRECID, LOGTYPE, TABLE_, DESCRIPTION, USERNAME, CREATEDBY, CREATEDTRANSACTIONID, DATAAREAID, PARTITION, SEQUENCENUMBER)  
            SELECT '03::' + 					 + 'ConnectorName' + ', ÿþ ' +  I.CONNECTORNAME + ' ÿþ ' + D.CONNECTORNAME + ' ÿþ '
...
В одном случае записи в лог вставляются всегда, в другом - только при изменении указанных полей.
__________________
Дмитрий
За это сообщение автора поблагодарили: Raven Melancholic (5), S.Kuskov (5).