我写了一个触发器,我想用它来将日期添加到记录中的列,以便我可以跟踪项目的插入.
调用了大量的插入(大约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)
任何帮助都感激不尽.
谢谢
您需要使用虚拟触发器表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)