2012-03-09 198 views
2

我需要基本的SQL觸發的一個例子,現在我來解釋一下:SQL Server觸發器更新列值

我有5列(列1,電力,欄3,column4,次)

值表(是數字),他的數據類型是'真實' 而「times」的數據類型是'int'

我會觸發每次「power」變爲0次'增加1

對不起,如果我的英語不完善牛逼!並希望你明白我的意思!如果有什麼不清楚的話告訴我,我會盡力解釋更好! :)

+2

澄清一點:您的標題有「MSSQL」,但您有「mysql」標籤......您正在使用哪個標籤? – 2012-03-09 22:33:38

+0

是的,你說的對不起,我錯誤地添加mysql標記也許是一個打字錯誤XD,順便說一句我使用的是mssql。 – LdB 2012-03-09 22:40:53

回答

2

假設列1是主鍵,觸發的一般形式如下:

create trigger MyPower 
on MyTable 
after insert, update 
as 
    if exists (select column1 
      from inserted i join MyTable m 
      on i.column1 = m.column1 
      and i.power = 0) 
    update MyTable set times = times + 1 
    where exists (select column1 from inserted i 
       join MyTable m 
       on i.column1 = m.column1) 
+0

非常感謝,但 「更新MyTable設置功率=功率+ 1」不應該是「設置時間=次+1」? – LdB 2012-03-09 22:57:14

+0

對不起,我誤解了它並將修改答案。 – 2012-03-09 23:13:45

+0

討厭帶壞消息但數數(*)始終存在。 – 2012-03-09 23:27:15

4

一個可能的基本觸發:

create trigger MyBasicTrigger on MyBasicTable 
after insert, update 
as 
-- Trigger rowcount should not mess with update that triggered it, search for it in documentation provided here 
    set NoCount ON 
-- If power is mentioned in update/insert statement at all 
    if update(Power) 
    begin 
    -- Update times for each changed row that has value of power 0 
    -- Inserted table holds new values in updated rows 
    -- You didn't mention your PK column(s), so I assume the name would be "ID" 
     update MyBasicTable set Times = Times + 1 
     from MyBasicTable inner join inserted on MyBasicTable.ID = inserted.ID 
     where Inserted.Power = 0 
    end 

的文檔NOCOUNT和更新(功率)是here

+0

謝謝尼古拉,我的主鍵是第2列:) – LdB 2012-03-09 23:06:28