将表更新为插入值,其中当前值在已删除表中

时间:2018-02-23 17:19:56

标签: sql sql-server triggers

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子句中使用被删除的表。我错过了什么?感谢。

1 个答案:

答案 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)

但如果你想在一个查询中更新多行,我没有简单的解决方案。