我有一个包含以下列的表格:
ID | CLIENT_SYNCED_TIME | NAME | DESCRIPTION | LM_TIME
当任何其他列值更新时,触发器将自动设置 LM_TIME
列。
但是,当 CLIENT_SYNCED_TIME
列更新时,我希望 LM_TIME
.... NOT 被触发器更新。
我现在正在使用下面的触发器,当任何列值发生更改时,它会更新 LM_TIME
。
我只是想让触发器不用担心 CLIENT_SYNCED_TIME
列。我必须进行哪些修改才能达到此效果?
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[updateLM_TIME]
ON [dbo].[INSTITUTIONS]
AFTER INSERT, UPDATE
AS
UPDATE dbo.INSTITUTIONS
SET lm_time = CONVERT(DATETIME, CONVERT(VARCHAR(20), GETDATE(), 120))
WHERE ID IN (SELECT DISTINCT ID FROM Inserted)
GO
最佳答案
试试这个。
USE [lms_db]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[updateLM_TIME]
ON [dbo].[INSTITUTIONS]
AFTER INSERT, UPDATE
AS
IF UPDATE(ID) or UPDATE(NAME) or UPDATE(DESCRIPTION)
BEGIN
UPDATE dbo.INSTITUTIONS
SET lm_time = CONVERT(DATETIME, CONVERT(VARCHAR(20), GETDATE(), 120))
WHERE ID IN (SELECT DISTINCT ID FROM Inserted)
END
或者
AFTER INSERT, UPDATE
AS
IF UPDATE(CLIENT_SYNCED_TIME)
PRINT 'Not Updated';
ELSE
BEGIN
UPDATE dbo.INSTITUTIONS
SET lm_time = CONVERT(DATETIME, CONVERT(VARCHAR(20), GETDATE(), 120))
WHERE ID IN (SELECT DISTINCT ID FROM Inserted)
PRINT 'Updated';
END
关于更新特定列上的 SQL Server 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40864586/