我的触发器是否更新了所有记录

时间:2013-01-27 18:39:44

标签: sql sql-server sql-server-2008 triggers sql-server-2008-r2

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

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

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

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

感谢。

3 个答案:

答案 0 :(得分:4)

它完全符合您的要求

UPDATE dbo.SubSections
SET Priority = Id

任何行都会更新。

您可以将其更改为

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

这只会影响插入的行。

答案 1 :(得分:4)

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

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

答案 2 :(得分:1)

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

更新dbo.SubSections
SET SubSections.Priority = SubSections.Id 来自插入 WHERE INSERTED.Id = dbo.SubSections.Id