2012-05-18 3 views
0

Предположим, у меня есть таблица ABC и таблица XYZ.Как создать триггер обновления для этой ситуации

Columns of ABC-->col1 col2 col3 col4 ......coln 
Columns of XYZ-->colname oldvalue newvalue modifieddate 

Так что, когда колонна, позволяет сказать, что col1 обновляется в ABC, я хочу, чтобы мой XYZ должен быть в состоянии вставить запись, которая имеет имя столбца модифицируется, старое значение этой колонки, новое значение столбца и дата модификации. Таким образом, для каждого столбца, который модифицирован в АВС я должен получить запись в XYZ, Может кто-нибудь помочь мне начать с этим, возможно, во-первых, Любые предложения приветствуются, спасибо

+0

если я пишу обновление ABC set col1 = 'x', col2 = col2, col2 следует учитывать как обновленный? –

+0

@ Янис сожалеет, что не смог получить вас правильно – freebird

ответ

1

вы просто задали вопрос о триггерах ,

Вы не можете рассчитывать на то, что мы построим для вас весь код.

Я сделаю именно то, что я сделал по вашему последнему вопросу, и направил вас в правильном направлении.

Чтобы узнать, если столбец был обновлен вы можете использовать UPDATE (столбец) ключевое слово

create trigger logUpdate 
on ABC 
After update 
as 
begin 
    if (update(col1)) begin 
    --will only get in here if the col1 was referenced on the update statment 
    insert into XYZ based ont INSERTED and DELETED tables 
    end 
end 

EDIT: альтернатива: CDC

+1

И обновление (col1) будет считаться «истинным», даже если фактических изменений данных не будет. –

+0

@ Diego ya Я не ожидаю всего кода, но можете ли вы дать мне некоторые ссылки на статьи, где я могу попробовать и построить свое требование, у меня нет опыта работы с триггерами. Спасибо – freebird

+0

привет janis. посмотрите на мой комментарий в коде: «- только заходите сюда, если col1 был указан в статуте обновления« – Diego

1

В триггере я бы написал что-то вроде этого для каждого столбца:

Select 'Col1' ColumnName, i.Col1 NewValue, d.Col1 OldValue 
From Inserted i 
    Inner Join Deleted d On i.IDCol = d.IDCol 
Where 
    (i.Col1 Is Null and Not d.Col1 is Null) 
    OR (Not i.Col1 Is Null and d.Col1 is Null) 
    OR (Not i.Col1 is Null And Not d.Col1 Is Null AND i.Col1 != d.Col1) 

В этом случае - это будет учитываться, если множество строк обновляется в одном выражении и будет регистрировать изменения только i f данные изменились.

Его легче, если нет столбцов NULL. А также должны учитывать типы данных ..

+0

@Janis благодарит за вашу помощь :) – freebird

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