【问题标题】:INSTEAD OF UPDATE TRIGGER for a table with foreign keyINSTEAD OF UPDATE TRIGGER 用于具有外键的表
【发布时间】:2016-02-08 17:36:28
【问题描述】:

我收到此错误:

无法在表 'MYBUDGET.tbl_Income' 上创建 INSTEAD OF DELETE 或 INSTEAD OF UPDATE TRIGGER 'trig_Income_Updater'。这是因为该表有一个 FOREIGN KEY 和级联 DELETE 或 UPDATE。

我可以使用“更新”。但是如何让它忽略原来的更新呢?

【问题讨论】:

    标签: sql sql-server triggers


    【解决方案1】:

    要忽略原始更新,您需要使用 RAISERROR,然后使用 ROLLBACK。

    Here 是“使用 DML AFTER 触发器在 PurchaseOrderHeader 和 Vendor 表之间强制执行业务规则”部分下的示例

    【讨论】:

    • ROLLBACK 将忽略我在执行 ROLLBACK 语句之前在触发器中所做的所有事情。我需要的是只忽略原始更新语句。
    【解决方案2】:

    只需更新您想要的字段,然后使用提供给触发器的“插入”和“删除”临时表“撤消”原始更新。

    例如(未经测试):

    --Do the stuff you want
    UPDATE table SET fields = values WHERE some condition
    
    
    --Undo the original update (minus anything you WANT changed above)
    UPDATE table SET unchangingfield = deleted.unchangingfield WHERE ID = deleted.ID
    

    “插入”表将包含新值,“删除”表包含正在更改的值。您可以将它们连接、查询或以其他方式处理它们,就好像它们是实际的表一样。

    【讨论】:

      猜你喜欢
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      相关资源
      最近更新 更多