在数据库中的所有行上调用触发器

rin*_*mpy 4 sql t-sql

我写了一个触发器,我想用它来将日期添加到记录中的列,以便我可以跟踪项目的插入.

调用了大量的插入(大约20000),我注意到每次添加新项时触发器都会更新与每个项关联的所有InsertDate列.如何确保只插入一次的项目会发生这种情况.

我的触发器如下:

 SET ANSI_NULLS ON
 SET QUOTED_INDENTIFIER ON
 GO


 CREATE TRIGGER [InsertDate_Item]
    ON [dbo].[ItemHolder]
    AFTER INSERT
    NOT FOR REPLICATION
 AS
 UPDATE ItemHolder SET InsertDate = GETDATE()
Run Code Online (Sandbox Code Playgroud)

任何帮助都感激不尽.

谢谢

gbn*_*gbn 7

您需要使用虚拟触发器表INSERTED将行限制为插入的行

 CREATE TRIGGER [InsertDate_Item]
    ON [dbo].[ItemHolder]
    AFTER INSERT
    NOT FOR REPLICATION
 AS
 SET NOCOUNT ON
 UPDATE IH
 SET InsertDate = GETDATE()
 FROM
    ItemHolder IH
    JOIN
    INSERTED INS ON IH.keycol = INS.keycol
 Go
Run Code Online (Sandbox Code Playgroud)

一件事:你最好在表格中添加默认值.无需触发器

ALTER TABLE ItemHolder ADD
CONSTRAINT DF_ItemHolder_InsertDate DEFAULT (GETDATE()) FOR InsertDate
Run Code Online (Sandbox Code Playgroud)