Нужна помощь с общим триггером обновлений - PullRequest
1 голос
/ 16 декабря 2010

Я использую SQL Server 2008 и хотел бы узнать, есть ли способ написать общий триггер обновления, который проверяет, имеет ли обновляемая таблица поле с именем «Last_Updated», и если да, обновляет это поле с помощью Функция getDate ().

Могу ли я написать один общий триггер, который работает для всех таблиц в моей базе данных?

Спасибо за ваше время!

Ответы [ 2 ]

2 голосов
/ 16 декабря 2010

нет, вам нужно иметь триггер для каждой таблицы или включать Last_Updated=GETDATE в каждое ОБНОВЛЕНИЕ.

попробуйте это:

SELECT 
    'CREATE TRIGGER [tr_u_'+TABLE_SCHEMA+'_'+TABLE_NAME+'] ON ['+TABLE_SCHEMA+'].['+TABLE_NAME+']'
        +'AFTER UPDATE AS '
        +'UPDATE ['+TABLE_SCHEMA+'].['+TABLE_NAME+'] '
        +'    SET Last_Updated=GETDATE() '
        +'    FROM ['+TABLE_SCHEMA+'].['+TABLE_NAME+']  A '
        +'    INNER JOIN INSERTED  i ON a.pk=i.pk '
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE COLUMN_NAME='LastChgDate' --'Last_Updated'

Этот запрос создаст команду Create Trigger для каждой таблицы, в которой есть столбец Last_Updated. Вы ДОЛЖНЫ отредактировать каждую команду и исправить a.pk=i.pk для каждой таблицы как соответствующие столбцы. Затем выполните все команды, и тогда у вас будут все триггеры. вам нужно будет добавить триггеры при добавлении новых таблиц.

1 голос
/ 16 декабря 2010

Вы можете объединить представление schema_information.tables в своем триггере и назначить триггер всем таблицам, но это ужасный способ. Вам лучше написать какой-нибудь генератор кода, чтобы сделать это для каждой таблицы, а не иметь универсальный триггер.

...