2009-01-24 1 views

ответ

3

я не могу проверить, но я думаю, его триггер, как этот

 
CREATE TRIGGER TriggerName ON TableName FOR UPDATE AS 
    IF UPDATE(ColumnUpdatedByERP) 
    BEGIN 
    UPDATE ... 
    END 

- Edit - лучший вариант, спасибо за комментарий Томалак

 
CREATE TRIGGER TriggerName ON TableName FOR UPDATE AS 
    DECLARE @oldValue VARCHAR(100) 
    DECLARE @newValue VARCHAR(100) 
    IF UPDATE(ColumnUpdatedByERP) 
    BEGIN 
    SELECT @oldValue = (SELECT ColumnUpdatedByERP FROM Deleted) 
    SELECT @newValue = (SELECT ColumnUpdatedByERP FROM Inserted) 
    IF @oldValue <> @newValue 
    BEGIN 
     UPDATE ... 
    END 
    END 
+0

IF UPDATE() проверяет, было ли поле указано только в инструкции UPDATE. Он вернет true, даже если значение поля не было изменено. Это не то, что имел в виду ОП, возможно, вы захотите изменить свой код, чтобы он сравнивался со «вставленной» таблицей. – Tomalak

+0

Это лучше. +1 Вы можете присоединиться к вставленным и удаленным, чтобы удалить необходимость в дополнительных переменных: IF (SELECT CASE WHEN d.TheColumn = i.TheColumn THEN 0 ELSE 1 END FROM deleted d, вставленный i) = 1 ... – Tomalak

+0

Это также игнорирует проблема нескольких строк, обновленных триггером! – Josef

3

Вы можете использовать триггер для обновления другого поля.

Редактирование: Я думаю, это может зависеть от базы данных SQLesque, в которой вы работаете.

Смежные вопросы