我编写了一个简单的触发器,它使用 id 列值设置列值。这是我的触发器。
CREATE TRIGGER SubSectionsPrioritytrigger
ON SubSections
AFTER INSERT
AS
UPDATE dbo.SubSections
SET Priority = Id
在编写此触发器之后,是否会在每次插入后更新所有记录。或唯一创建的新行。
有人可以提供有关此的任何信息。
谢谢。
我编写了一个简单的触发器,它使用 id 列值设置列值。这是我的触发器。
CREATE TRIGGER SubSectionsPrioritytrigger
ON SubSections
AFTER INSERT
AS
UPDATE dbo.SubSections
SET Priority = Id
在编写此触发器之后,是否会在每次插入后更新所有记录。或唯一创建的新行。
有人可以提供有关此的任何信息。
谢谢。
它完全按照你写的
UPDATE dbo.SubSections
SET Priority = Id
任何行都会被更新。
您可以将其更改为
UPDATE dbo.SubSections
SET SubSections.Priority = Inserted.Id
FROM INSERTED
WHERE INSERTED.id = SubSections.id
这只会影响插入的行。
要仅更新插入的行,您可以执行以下操作:
UPDATE dbo.SubSections
SET SubSections.Priority = SubSections.Id
FROM INSERTED
WHERE INSERTED.Id = dbo.SubSections.Id
要将最后插入的行更新为您想要的任何值,您需要指定使该行与其他行唯一的行 ID。并且在您的触发器中,您没有指定导致表中所有行都被更新的 where 子句。每当与触发器关联的表上发生任何操作/事件时,意味着插入/更新或删除新记录时,就会在 SQL Server 的内存中创建一个魔术表,我们可以使用关键字“Inserted”访问该魔术表在插入或更新的情况下,在删除的情况下为“已删除”。所以你的查询应该是这样的。
更新 dbo.SubSections
SET SubSections.Priority = SubSections.Id FROM INSERTED WHERE INSERTED.Id = dbo.SubSections.Id