2013-04-22 7 views
0

Вот мои таблицы:SQL Server Trigger On Update или Вставить

Report Таблица:

ReportID Status 
1   'out' 
2   null 

Вход Таблица

LogID  Status  ReportID 
1   'out'  1 

Когда я вставить новую запись в журнал таблицы Я хочу триггер для обновления соответствующего поля состояния. Пример: Вставить в журнал (LogID = 2, Status = 'out', ReportID = 2) Я бы хотел обновить таблицу отчетов для соответствующего ReportID (2) fild для статуса, чтобы они совпадали.

Выход будет таким: Report Таблица:

ReportID Status 
1   'out' 
2   'out'  //changed from null to out by the Log trigger 

Вход Таблица

LogID  Status  ReportID 
1   'out'  1 
2   'out'  2 

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

+0

Почему бы вам не просто использовать вид? –

+0

@lc. - Что было бы для OP здесь? Я искренне любопытен, не комментирую замечательный комментарий aleck :) – Tim

+0

@Tim Я немного читаю вопрос и угадываю, что OP хочет, чтобы в таблице отчета отображался последний статус в соответствии с строками в таблице журнала. Поэтому я задаюсь вопросом о необходимости денормализации и хранения тех же данных в двух разных местах. –

ответ

3

Я думаю, что вы могли бы искать что-то вроде этого:

create trigger updatereport on log 
after insert, update 
as 
update r 
set status = i.status 
from report r 
    inner join inserted i on r.reportid = i.reportid; 

SQL Fiddle Demo

+0

В MS SQL Server Mgmt Studio должен появиться триггер в разделе «Программируемость»> «Триггеры базы данных» ... если это так не появилось, но я также не получил ошибок при запуске кода, который вы указали – Kairan

+0

@Kairan - не имеет этого передо мной. Я уверен, что это отображается под столом - разверните таблицу, и одна из папок, которые вы должны увидеть, - это триггеры. Вот сообщение, которое я только что просмотрел: http://stackoverflow.com/questions/12346914/how-to-find-all-trigger-associated-with-a-table-with-sql-server – sgeddes

+0

Спасибо, что это найденный. – Kairan