更新了特定列上的 SQL Server 触发器

Pra*_*eep 5 sql sql-server triggers

我有一个包含以下列的表格:

ID | CLIENT_SYNCED_TIME  |  NAME  | DESCRIPTION | LM_TIME
Run Code Online (Sandbox Code Playgroud)

LM_TIME当任何其他列值更新时,该列将由触发器自动设置。

但是我希望LM_TIME....在列更新时不会被触发器CLIENT_SYNCED_TIME更新。

我现在正在使用下面的触发器,它会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
Run Code Online (Sandbox Code Playgroud)

Mr.*_*ale 6

尝试这个。

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
Run Code Online (Sandbox Code Playgroud)

或者

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
Run Code Online (Sandbox Code Playgroud)


Pra*_*eep 2

感谢博萨尔先生

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 NOT UPDATE(CLIENT_SYNCED_TIME)

BEGIN

UPDATE dbo.INSTITUTIONS
SET lm_time = CONVERT(DATETIME, CONVERT(VARCHAR(20), GETDATE(), 120))
WHERE ID IN (SELECT DISTINCT ID FROM Inserted)

END
Run Code Online (Sandbox Code Playgroud)