sql-server – 在仅更新SQL Server 2008中同一表中的特定列后,更新触发器中的一列

我有下面这个结构的表:

CREATE TABLE [dbo].[Tasks]
(
    [TasksID] [int] IDENTITY(1,1) NOT NULL,
    [CommitteeID] [int] NULL,
    [TransactionDateTime] [datetime2](7) NULL,
    [inspectionStatus] [nvarchar](50) NULL,
    [Latitude] [nvarchar](50) NULL,
    [Longitude] [nvarchar](50) NULL,
    [acceptanceState] [nvarchar](50) NULL,
    [comments] [nvarchar](350) NULL,
    [ScheduledDateTime] [datetime2](7) NULL,
)

我想要的是创建一个触发器,用当前日期时间更新[TransactionDateTime],只有更新列[acceptanceState].

我创建了以下触发器

CREATE TRIGGER [dbo].[TransactionDateUpdate]
ON [dbo].[Tasks]
AFTER UPDATE  
AS BEGIN
   UPDATE dbo.Tasks
   SET TransactionDateTime = GETDATE()
   FROM INSERTED i
   WHERE i.TasksID = Tasks.TasksID 
END

这个触发器的问题是,它更新了列[TransactionDateTime]但是如果我对表中的任何一个列进行了更改,我想要的只是在更改/更新列[acceptanceState]时才更新[TransactionDateTime].我可以找到任何帮助吗?如果更改/更新[acceptanceState],如何添加更新[TransactionDateTime]的条件?

我搜索了很多类似的问题,但我没有找到完全相同的问题.

最佳答案
您只需要在触发器中添加IF UPDATE检查并加入已删除的表:

CREATE TRIGGER [dbo].[TransactionDateUpdate]
ON [dbo].[Tasks]
AFTER UPDATE  
AS 
BEGIN
   IF UPDATE(acceptanceState)  --add this line
   UPDATE dbo.Tasks
   SET TransactionDateTime = GETDATE()
   FROM INSERTED i
   JOIN DELETED d on i.TasksID = d.TasksID --add this line
   WHERE i.TasksID = Tasks.TasksID 
END

转载注明原文:sql-server – 在仅更新SQL Server 2008中同一表中的特定列后,更新触发器中的一列 - 代码日志