【发布时间】: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
我收到此错误:
无法在表 'MYBUDGET.tbl_Income' 上创建 INSTEAD OF DELETE 或 INSTEAD OF UPDATE TRIGGER 'trig_Income_Updater'。这是因为该表有一个 FOREIGN KEY 和级联 DELETE 或 UPDATE。
我可以使用“更新”。但是如何让它忽略原来的更新呢?
【问题讨论】:
标签: sql sql-server triggers
要忽略原始更新,您需要使用 RAISERROR,然后使用 ROLLBACK。
Here 是“使用 DML AFTER 触发器在 PurchaseOrderHeader 和 Vendor 表之间强制执行业务规则”部分下的示例
【讨论】:
只需更新您想要的字段,然后使用提供给触发器的“插入”和“删除”临时表“撤消”原始更新。
例如(未经测试):
--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
“插入”表将包含新值,“删除”表包含正在更改的值。您可以将它们连接、查询或以其他方式处理它们,就好像它们是实际的表一样。
【讨论】: