2015-10-20 62 views
0

我有用PHP(很久以前)編碼的大型系統 - 它在MSSQL數據庫上運行查詢。我需要的是在數據庫級別創建一個觸發器,如果​​更新要將行f_month更改爲99(即包含更新[表]集f_month='99'),該行將具有my_date <= [24months before now or older] 。我希望這應該是可行的,但沒有運氣試圖弄清楚如何在我自己的..謝謝任何暗示,1月MSSQL - 觸發器禁用舊記錄beeing更新

--------------工作一行更新,但未能對multiople行更新--------------

CREATE TRIGGER update_fix 
    ON mytable 
    FOR UPDATE AS 
BEGIN 
    SET NOCOUNT ON; 
    if (select f_month from inserted)=99 and (select x_date from mytable where data_id in((select data_id from inserted)))<=DateAdd(yy,-2,GetDate()) 
    BEGIN 
      RAISERROR('Cannot update old records',16,1) 
      ROLLBACK TRANSACTION 
      RETURN; 
    END 
END 
GO 

上面所示的解決方案的工作就好了,如果一個行beeing更新,但它不影響對工作的更新多行..這是一個問題..任何人都可以幫助我改變觸發器工作更新影響多行?應該檢查每一行beeing分別更新 - 所以如果有更新的10行,其中一個不應該更新 - 只是不會更新,其他行將成功更新..甚至可能觸發?

+1

SQL Server觸發器對每個語句執行一次,因此此觸發器可能與一組行有關,其中一些*符合您的條件,其中一些*不*。你想在這種情況下做什麼?失敗整個陳述?允許有效的更改,忽略無效更改?還有別的嗎? –

+0

正如Damien所說,使用觸發器這一切都是完全可能的,但我們需要更多的規範來指導您朝着正確的方向發展。如果你自己嘗試這樣做,並改變你的問題來增加更多關於你卡住的地方的細節,可能是最好的。 –

+0

我創建的觸發器適用於影響一行的更新,如果更多的行受到影響,觸發器無法正常工作..試圖改變它很多方式,但沒有運氣使它工作..不確定它甚至可以工作我想的方式......任何建議?謝謝 –

回答

0

嘗試檢查約束,這可能也有幫助。