【问题标题】:SQL Server trigger on specific column updated特定列上的 SQL Server 触发器已更新
【发布时间】:2016-11-29 11:18:53
【问题描述】:

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

ID | CLIENT_SYNCED_TIME  |  NAME  | DESCRIPTION | LM_TIME

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

但是我希望LM_TIME .... NOTCLIENT_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

【问题讨论】:

  • 如果有一个UPDATE 语句并且它更新了CLINET_SYNCED_TIME(和其他列)但碰巧将它设置为它已经拥有的相同值,那么应该发生什么?
  • 这不是问题先生..我只是想让触发器不用担心“CLIENT_SYNCED_TIME”列

标签: sql sql-server triggers


【解决方案1】:

试试这个。

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

【讨论】:

  • 先生.. 为简单起见,我只指定了 4 列,但该表实际上有 20 多列。!有没有办法只忽略特定的列。!
  • 先生,感谢您的帮助...我已经通过修改您的代码 IF NOT UPDATE(client_last_syncd_time)
  • @Pradeep 你也可以使用 if else 。校验一次代码
  • 哇..!谢谢先生..!
【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    相关资源
    最近更新 更多