2013-04-22 86 views
0

這裏是我的表:SQL Server觸發器在更新或插入

報告表:

ReportID Status 
1   'out' 
2   null 

日誌表

LogID  Status  ReportID 
1   'out'  1 

當我插入新記錄到日誌表我想觸發更新相應的狀態字段。示例:插入到日誌(LogID = 2,Status ='out',ReportID = 2)我想要更新ReportID(2)fild的狀態報告表以便它們匹配。

輸出會像這樣結束; 報告表:

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

爲什麼你不只是使用視圖? – 2013-04-22 01:32:56

+0

@lc。 - 這裏的觀點對OP來說會做什麼?我真的好奇,沒有做出聰明的評論:) – Tim 2013-04-22 01:46:16

+0

@Tim我正在讀一些問題,猜測OP希望報表按照日誌表中的行顯示最新狀態。因此,我在質疑是否需要在兩個不同的地方去規範化和存儲相同的數據。 – 2013-04-22 01:49:27

回答

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中,觸發器應顯示在Programmability> Database Triggers ...下,如果沒有顯示,但運行代碼時沒有收到錯誤 – Kairan 2013-04-22 02:19:16

+0

@Kairan - 沒有它在我前面。我很確定它出現在表格下方 - 展開表格,您應該看到的其中一個文件夾是觸發器。這裏是我剛剛查找的一篇文章:http://stackoverflow.com/questions/12346914/how-to-find-all-trigger-associated-with-a-table-with-sql-server – sgeddes 2013-04-22 02:22:13

+0

謝謝你,這是它的地方找到。 – Kairan 2013-04-22 02:25:10