1

我编写了一个简单的触发器,它使用 id 列值设置列值。这是我的触发器。

CREATE TRIGGER SubSectionsPrioritytrigger
ON SubSections
AFTER INSERT
AS
UPDATE dbo.SubSections
SET Priority = Id

在编写此触发器之后,是否会在每次插入后更新所有记录。或唯一创建的新行。

有人可以提供有关此的任何信息。

谢谢。

4

3 回答 3

4

它完全按照你写的

UPDATE dbo.SubSections
SET Priority = Id

任何行都会被更新。

您可以将其更改为

UPDATE dbo.SubSections  
SET  SubSections.Priority = Inserted.Id 
FROM INSERTED
WHERE INSERTED.id = SubSections.id

这只会影响插入的行。

于 2013-01-27T18:43:40.977 回答
4

要仅更新插入的行,您可以执行以下操作:

UPDATE dbo.SubSections  
SET  SubSections.Priority = SubSections.Id 
FROM INSERTED
WHERE INSERTED.Id = dbo.SubSections.Id
于 2013-01-27T18:48:33.320 回答
2

要将最后插入的行更新为您想要的任何值,您需要指定使该行与其他行唯一的行 ID。并且在您的触发器中,您没有指定导致表中所有行都被更新的 where 子句。每当与触发器关联的表上发生任何操作/事件时,意味着插入/更新或删除新记录时,就会在 SQL Server 的内存中创建一个魔术表,我们可以使用关键字“Inserted”访问该魔术表在插入或更新的情况下,在删除的情况下为“已删除”。所以你的查询应该是这样的。

更新 dbo.SubSections
SET SubSections.Priority = SubSections.Id FROM INSERTED WHERE INSERTED.Id = dbo.SubSections.Id

于 2013-01-27T19:11:28.297 回答