Генерация триггера журнала аудита

Работал над системой Audit Trail и решил сделать это с таблицей Shadow/History с триггерами.

Следил за этой статьей журнала аудита и пытался использовать Инструмент генератора CodeSmith

Я не понимаю, как он создает таблицу истории и триггер.

Кто-нибудь может понять, как это работает, и помочь мне в этом.

Я попробовал Google, чтобы понять это. Но нет четкого примера

Мне ничего не понятно из нижеприведенного

Таблица аудита выглядит так

 CREATE TABLE [dbo].[<%= AuditTableName %>] (
    [ChangeLogID] [int] IDENTITY (1, 1)  ,
    [OperationType] [varchar] (10) NOT NULL ,
    [ChangeTimestamp] [datetime] NOT NULL ,
    [MadeBy] [varchar] (6)  NOT NULL ,
    [TableChanged] [varchar] (50)  NOT NULL 
 ) ON [PRIMARY]

Детальная таблица выглядит так

 CREATE TABLE [dbo].[<%= AuditFieldTableName %>] (
    [FieldName] [varchar] (50) NOT NULL ,
    [ChangeLogID] [int] NOT NULL ,
    [BeforeValue] [sql_variant]  NOT NULL ,
    [AfterValue] [sql_variant] NOT NULL 
 ) ON [PRIMARY]

Как сгенерировать это и добавить триггер и как вставить значения AuditFieldTableName?


person Billa    schedule 21.10.2013    source источник
comment
Частичный ответ: Как сгенерировать это..? Вы убираете маркеры комментариев ('--') и выполняете команды. Я убрал для вас маркеры комментариев. Вероятно, вам также нужно указать определенные имена таблиц.   -  person RBarryYoung    schedule 21.10.2013


Ответы (1)


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

TABLE auditEntry (
    auditEntryId           INTEGER      PRIMARY KEY,
    operationType          VARCHAR(10)  NOT NULL,      -- For INSERT / UPDATE / DELETE
    changeTimestamp        DATETIME     NOT NULL,
    madeBy                 VARCHAR(50)  NOT NULL,
    tableName              VARCHAR(30)  not null,      -- stores the name of the table changed
    columnName             VARCHAR(30)  not null,      -- stores the name of column changed
    oldInt                 INTEGER,
    newInt                 INTEGER,
    oldVarchar             VARCHAR(100),
    newVarchar             VARCHAR(100),
    oldDate                DATETIME,
    newDate                DATETIME)

Теперь я думаю, что написать триггеры уровня строк для INSERT, UPDATE и DELETE в ваших таблицах будет проще простого, если вы умеете их писать. Поищите в MSDN, как писать такие триггеры, и все будет в порядке.

person Rachcha    schedule 21.10.2013
comment
Столбцы sql_variant в исходной таблице Detail решают проблему с типом данных. - person RBarryYoung; 21.10.2013