gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:55:37 24 4
gpt4 key购买 nike

我有以下具有这种结构的表格:

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,
)

我真正想要的是创建一个触发器,仅当列[acceptanceState]更新时,才用当前日期时间更新[TransactionDateTime]

我创建了以下触发器

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],但如果我对表中的任何列进行更改,我想要的是更新[TransactionDateTime] ] 仅当列[acceptanceState] 更改/更新时。我可以找到任何帮助吗?如何添加仅在[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 中仅更新同一表中的特定列后更新触发器中的一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30038260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com