2016-11-29 126 views
2

我有下面的表:的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://stackoverflow.com/questions/17768608/what-is-the-practical-use- sql-server-with-example –

回答

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 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最受歡迎。 –

0

感謝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