CREATE TRIGGER TR_ControlFreqKey_Update
ON ControlFreqKey
AFTER UPDATE
AS
IF (UPDATE (FreqID))
BEGIN
UPDATE Controls
Set Controls.FreqAdjustment = inserted.FreqID
FROM inserted
WHERE controls.FreqAdjustment = deleted.FreqID
我正在尝试使用触发器作为伪"更新级联"因为sql server阻止我从一个父表到这个表的两个级联路径。
如何将FreqAdjustment更新为新的FreqID,它当前等于刚更新的值。这段代码应该做我想要的,但它不允许我在where子句中使用被删除的表。我错过了什么?感谢。
答案 0 :(得分:0)
触发器不会对每一行执行。 触发器执行一次,即使您在一个更新查询中更新多行。
所以插入和删除不是一行,而是表。所以你必须像其他表一样使用它们。
如果您确定表中的每次更新只影响了一行,那么这将有效
CREATE TRIGGER TR_ControlFreqKey_Update
ON ControlFreqKey
AFTER UPDATE
AS
IF (UPDATE (FreqID))
BEGIN
UPDATE Controls
Set Controls.FreqAdjustment = inserted.FreqID
FROM inserted
WHERE controls.FreqAdjustment IN ( SELECT FreqID FROM deleted)
但如果你想在一个查询中更新多行,我没有简单的解决方案。