的SQL Server触发更新

问题描述:

我有下面的表:的SQL Server触发更新

ID | CLIENT_SYNCED_TIME | NAME | DESCRIPTION | LM_TIME 

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 
+0

如果有一个'UPDATE'声明,它更新'CLINET_SYNCED_TIME'(等栏目),但偏偏它设置为它已具有相同的价值,那么应该发生什么? –

+0

这不是问题先生..我只是想让触发器不用担心“CLIENT_SYNCED_TIME”列 – Pradeep

+0

看看:http://*.com/questions/17768608/what-is-the-practical-use- sql-server-with-example –

试试这个。

  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 
+0

为简单起见,我只指定了4列,但表中实际上有20列以上。有没有什么办法只能忽略一个特定的列。 – Pradeep

+0

先生谢谢你的帮助...我通过修改你的代码来实现这一点如果不更新(client_last_syncd_time) – Pradeep

+0

@Pradeep最受欢迎。 –

感谢Bhosale先生

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