2015-10-20 64 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

尝试检查约束,这可能也有帮助。