我有一个表 de,它有 3 列 id(主键 int)、A(int) 和 B(int)。
我的要求是当 A 有更新时更新 B。
所以我使用了触发器并尝试如下
create trigger deTrigger on [dbo].[de]
for update
As
declare @aValue int;
select @aValue=i.A from inserted i;
update de set B =@aValue
GO
但我不知道如何在上面的更新查询中使用 where
条件,因此每当我更新单个记录中的 A 时,B col 的所有行都会更新。
如果有使用触发器的替代方法,也请提出建议
最佳答案
你需要这样的东西:
CREATE TRIGGER deTrigger
ON [dbo].[de]
FOR UPDATE
AS
UPDATE de
SET B = i.A
FROM Inserted i
INNER JOIN Deleted d ON i.ID = d.ID
WHERE i.ID = de.ID
AND i.A <> d.A
GO
基本上,您需要加入到Inserted
伪表(因为它可能包含多行),并且您还需要加入到 Deleted
伪表。比较 Inserted
和 Deleted
中的值,您可以获取对 A
列进行了更新的行,并通过这些行,您可以设置de
表中 B
的值
关于sql - 当另一列更新时如何使用更新一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29443076/