对于具有外键的表,安装更新触发器

时间:2011-01-03 04:41:03

标签: sql sql-server triggers

我收到此错误:

  

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

我可以使用'FOR UPDATE'。但如何让它忽略原始更新?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

例如(未经测试):

--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

“inserted”表将包含新值,“deleted”表包含要更改的值。您可以加入,查询和处理它们,就好像它们是实际表格一样。