NULL에서 값을 업데이트 할 때 SQL Server AFTER UPDATE 트리거가 작동하지 않음

igor.sinkovec

설명하기에는 너무 어리석은 이유로 날짜 및 시간 값을 보유하는 테이블에 세 개의 열이 있습니다. 한 열에는 날짜 만, 두 번째 열에는 시간 만, 세 번째 열에는 DATETIME값이 있습니다. 다음과 같이 보입니다.

OPPORTUNITYID | ... | ProductionDate | ProductionTime | PRODUCTIONDATETIME
-------------------------------------------------------------------------------
091798-324971 | ... | 12-07-2014     | 11:30 AM       | 2014-07-12 11:30:00:000

그런 다음 업데이트되는 값에 관계없이 이러한 값을 동기화 상태로 유지하는 트리거가 있습니다. 다음은 트리거의 일부입니다.

CREATE TRIGGER [dbo].[TBL_OPPORTUNITY_DUEDATES_TRU]
ON  [dbo].[TBL_OPPORTUNITY]
AFTER UPDATE
AS

BEGIN
    SET NOCOUNT ON;

    IF UPDATE ( PRODUCTIONDATETIME )
    BEGIN

        UPDATE TBL_OPPORTUNITY
        SET ProductionDate = CONVERT(VARCHAR(10), PRODUCTIONDATETIME, 105)
        , ProductionTime = REPLACE(REPLACE(RIGHT('0'+LTRIM(RIGHT(CONVERT(VARCHAR, PRODUCTIONDATETIME,100), 7)), 7), 'AM', ' AM'), 'PM', ' PM')
        WHERE OPPORTUNITYID IN ( SELECT i.OPPORTUNITYID FROM inserted i
            INNER JOIN deleted d ON i.OPPORTUNITYID = d.OPPORTUNITYID
            WHERE NOT i.PRODUCTIONDATETIME = d.PRODUCTIONDATETIME
            AND NOT ( i.PRODUCTIONDATETIME = '' OR i.PRODUCTIONDATETIME IS NULL )
        );
    END

    IF ( UPDATE ( ProductionDate ) OR UPDATE ( ProductionTime ) )
    BEGIN

        UPDATE TBL_OPPORTUNITY
        SET PRODUCTIONDATETIME = CONVERT(DATETIME, ProductionDate + ' ' + ProductionTime, 105)
        WHERE OPPORTUNITYID IN ( SELECT i.OPPORTUNITYID FROM inserted i
            INNER JOIN deleted d ON i.OPPORTUNITYID = d.OPPORTUNITYID
            WHERE ( NOT i.ProductionDate = d.ProductionDate
                OR NOT i.ProductionTime = d.ProductionTime )
            AND NOT ( i.ProductionDate = '' OR i.ProductionDate IS NULL )
            AND NOT ( i.ProductionTime = '' OR i.ProductionTime IS NULL )
        );

        UPDATE TBL_OPPORTUNITY
        SET PRODUCTIONDATETIME = CONVERT(DATETIME, ProductionDate + ' 12:00:00', 105)
        WHERE OPPORTUNITYID IN ( SELECT i.OPPORTUNITYID FROM inserted i
            INNER JOIN deleted d ON i.OPPORTUNITYID = d.OPPORTUNITYID
            WHERE ( NOT i.ProductionDate = d.ProductionDate
                OR NOT i.ProductionTime = d.ProductionTime )
            AND NOT ( i.ProductionDate = '' OR i.ProductionDate IS NULL )
            AND ( i.ProductionTime = '' OR i.ProductionTime IS NULL )
        );

    END

END
GO

트리거는 값이 업데이트 될 때마다 예상대로 작동합니다. 그러나 값이에서 업데이트되는 경우 (에서와 같이 변경하지 않음) 트리거가 실패합니다. NULL즉, 열의 이전 값이 NULL이고 새 값이 '02 -03-2014 '인 경우 .

왜 그런 겁니까?

서버는 Microsoft SQL Server 2008 R2입니다.

단서를 주셔서 감사합니다.

Muqo

작성시 트리거는 NULL을 포함하는 같음 또는 같지 않음이 참으로 평가 될 수 없기 때문에 이전 값이 NULL 인 행을 무시해야합니다. 와 같은 WHERE 조건 NOT i.ProductionDate = d.ProductionDate은 i.ProductionDate가 무엇이든 상관없이 d.ProductionDate가 NULL이면 어떤 행도 반환하지 않습니다. d.ProductionDate IS NULLd.ProductionDate에 값이없는 경우를 처리 할 가능성을 명시 적으로 확인해야 합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

값이 null 인 경우 SQL Server 업데이트 트리거가 열을 업데이트하지 않음

분류에서Dev

SQL Server에서 업데이트 할 때 문자 인코딩이 올바르게 업데이트되지 않음

분류에서Dev

업데이트 할 때 값의 끝에 문자 추가-SQL Server

분류에서Dev

SQL Server에서 트랜잭션을 삭제할 때 트리거를 사용하여 다른 테이블의 데이터를 업데이트하는 방법

분류에서Dev

ngModelChange에서 업데이트 된 값을 조작 할 때 ngModel 업데이트가 반영되지 않습니다.

분류에서Dev

허용되지 않을 때 트리거 할 SQL 논리를 작성하는 방법 (테이블이 업데이트되는 것과 동일한 경우)

분류에서Dev

AngularJs : 목록 값을 업데이트 할 때 중첩 된 UI-Bootstrap 아코디언이 작동하지 않음

분류에서Dev

C # SQL Server 업데이트가 작동하지 않음

분류에서Dev

지시문에서 값을 추가 할 때 배열의 $ scope. $ watch가 업데이트되지 않음

분류에서Dev

작업을 사용할 때 Vuex가 상태를 업데이트하지 않음

분류에서Dev

SQL Server : 커서를 사용하지 않고 이전에 업데이트 된 행 값을 기반으로 행을 업데이트 할 수 있습니까?

분류에서Dev

displaymember의 값을 변경할 때 차트가 업데이트되지 않음

분류에서Dev

jquery에서 값을 선택할 때 Angularjs 범위가 업데이트되지 않음

분류에서Dev

서명 된 APK로 릴리스 할 때 SQL Server 연결이 작동하지 않음-Android

분류에서Dev

SQL Server의 IF 문 내에서 업데이트 스크립트가 작동하지 않음

분류에서Dev

SQL Server에서 열 값을 업데이트 할 때 오류가 발생합니까?

분류에서Dev

항목을 제거 할 때 Android recyclerview가 업데이트되지 않음

분류에서Dev

SQL Server에서 오류가 발생할 때 자동 필드가 업데이트되지 않도록하는 방법은 무엇입니까?

분류에서Dev

Firestore에서 값을 가져올 때 useState가 업데이트되지 않음

분류에서Dev

업데이트 패널을 사용할 때 코드 뒤의 RegisterStartupScript가 작동하지 않음

분류에서Dev

SQL Server에서 업데이트 쿼리가 C #에서 작동하지 않는 이유는 무엇입니까?

분류에서Dev

SQL Server : 별칭 및 중첩 선택을 사용하여 업데이트가 작동하지 않음

분류에서Dev

업데이트 된 열 값을 수동으로 수정할 때 HeidiSQL Before Update 트리거 오류

분류에서Dev

SQL Server에서 읽을 때 XML 데이터가 완전하지 않음

분류에서Dev

삽입 및 업데이트 후 SQL Server 트리거가 트리거되지 않음

분류에서Dev

PL / SQL : 열을 업데이트 할 때 재귀 트리거 방지

분류에서Dev

AngularJS에서 호출 할 때 Angular 라우터가 브라우저 URL을 업데이트하지 않음

분류에서Dev

Vuex에서 객체의 속성을 업데이트 할 때 Getter가 반응하지 않음

분류에서Dev

업데이트 패널 AsyncPostback 트리거가 IE에서 작동하지 않음

Related 관련 기사

  1. 1

    값이 null 인 경우 SQL Server 업데이트 트리거가 열을 업데이트하지 않음

  2. 2

    SQL Server에서 업데이트 할 때 문자 인코딩이 올바르게 업데이트되지 않음

  3. 3

    업데이트 할 때 값의 끝에 문자 추가-SQL Server

  4. 4

    SQL Server에서 트랜잭션을 삭제할 때 트리거를 사용하여 다른 테이블의 데이터를 업데이트하는 방법

  5. 5

    ngModelChange에서 업데이트 된 값을 조작 할 때 ngModel 업데이트가 반영되지 않습니다.

  6. 6

    허용되지 않을 때 트리거 할 SQL 논리를 작성하는 방법 (테이블이 업데이트되는 것과 동일한 경우)

  7. 7

    AngularJs : 목록 값을 업데이트 할 때 중첩 된 UI-Bootstrap 아코디언이 작동하지 않음

  8. 8

    C # SQL Server 업데이트가 작동하지 않음

  9. 9

    지시문에서 값을 추가 할 때 배열의 $ scope. $ watch가 업데이트되지 않음

  10. 10

    작업을 사용할 때 Vuex가 상태를 업데이트하지 않음

  11. 11

    SQL Server : 커서를 사용하지 않고 이전에 업데이트 된 행 값을 기반으로 행을 업데이트 할 수 있습니까?

  12. 12

    displaymember의 값을 변경할 때 차트가 업데이트되지 않음

  13. 13

    jquery에서 값을 선택할 때 Angularjs 범위가 업데이트되지 않음

  14. 14

    서명 된 APK로 릴리스 할 때 SQL Server 연결이 작동하지 않음-Android

  15. 15

    SQL Server의 IF 문 내에서 업데이트 스크립트가 작동하지 않음

  16. 16

    SQL Server에서 열 값을 업데이트 할 때 오류가 발생합니까?

  17. 17

    항목을 제거 할 때 Android recyclerview가 업데이트되지 않음

  18. 18

    SQL Server에서 오류가 발생할 때 자동 필드가 업데이트되지 않도록하는 방법은 무엇입니까?

  19. 19

    Firestore에서 값을 가져올 때 useState가 업데이트되지 않음

  20. 20

    업데이트 패널을 사용할 때 코드 뒤의 RegisterStartupScript가 작동하지 않음

  21. 21

    SQL Server에서 업데이트 쿼리가 C #에서 작동하지 않는 이유는 무엇입니까?

  22. 22

    SQL Server : 별칭 및 중첩 선택을 사용하여 업데이트가 작동하지 않음

  23. 23

    업데이트 된 열 값을 수동으로 수정할 때 HeidiSQL Before Update 트리거 오류

  24. 24

    SQL Server에서 읽을 때 XML 데이터가 완전하지 않음

  25. 25

    삽입 및 업데이트 후 SQL Server 트리거가 트리거되지 않음

  26. 26

    PL / SQL : 열을 업데이트 할 때 재귀 트리거 방지

  27. 27

    AngularJS에서 호출 할 때 Angular 라우터가 브라우저 URL을 업데이트하지 않음

  28. 28

    Vuex에서 객체의 속성을 업데이트 할 때 Getter가 반응하지 않음

  29. 29

    업데이트 패널 AsyncPostback 트리거가 IE에서 작동하지 않음

뜨겁다태그

보관