2016-11-29 1 views
2

업데이트되었습니다.SQL 서버 트리거 나는 다음과 같은 열이있는 테이블이

그러나 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- of-timestamp-column-in-sql-server-with-example –

답변

2

시도해보십시오. 씨 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 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

sir .. 단순화하기 위해 4 열만 지정했지만 테이블에는 실제로 20 열 이상이 있습니다. 특정 열만 무시할 수있는 방법이 있습니까? – Pradeep

+0

선생님, 도움을 주셔서 감사합니다 ... 나는 당신의 코드를 수정하여 이것을 깨달았습니다. 업데이트하지 않을 경우 (client_last_syncd_time) – Pradeep

+0

@Pradeep 대부분 환영합니다. –

0

감사

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 
관련 문제