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

标签 sql sql-server triggers

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

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/

相关文章:

sql-server - 如何在 Sql Server 2008 表上启用全文索引

php - 具有大数据集的 MySQL 关系数据库?

mysql - SQL:查找表中的所有行,其中引用原始行的另一个表中的所有行都具有特定属性

sql - 从sql server中的charindex函数获取第二次出现

mysql - 如何在 CSV 导入(MariaDB/MySQL)上生成串联主键?

mysql - 使用更新和插入触发器在其他关系中提供计数列

postgresql - Postgresql CHECK IN 列表约束的自定义错误消息

SQL Server : run function for each row based on the provided row value

java - MS Access "invalid record set status"错误

asp.net - 使用 .NET 中的证书验证 SQL 连接