ama*_*l50 5 sql-server triggers updates 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,
)
Run Code Online (Sandbox Code Playgroud)
我想要的是创建一个[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
Run Code Online (Sandbox Code Playgroud)
这个触发器的问题是它更新了列,[TransactionDateTime]但是如果我对表中的任何列进行了更改,我想要的[TransactionDateTime]只是在列[acceptanceState]更改/更新时更新.我可以找到任何帮助吗?[TransactionDateTime]如果[acceptanceState]更改/更新,如何添加更新条件?
我搜索了很多类似的问题,但我没有找到完全相同的问题.
Fut*_*Fan 12
您只需要在触发器中添加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
Run Code Online (Sandbox Code Playgroud)