2014-12-12 4 views
2

반환이 if 문은 ... 트리거입니다 왜 항상 여기에 진정한

ALTER TRIGGER [dbo].[trg_rejectNoTitle] 
ON [dbo].[FMQI] 
    FOR INSERT,UPDATE 
AS 
IF EXISTS (SELECT * FROM inserted WHERE TITLE = '') 
    BEGIN 
    SET NOCOUNT ON; 
    RAISERROR('Missing TITLE',10,1) 
    ROLLBACK TRAN 

    END 
GO 

제목 필드가 빈 문자열 때 내가 삽입 또는 갱신을 거부 할 볼 수 있듯이

. TITLE이 비어 있지 않고 삽입 또는 업데이트가 거부 된 경우에도 if 구문이 항상 true로 해결되는 이유를 알 수 없습니다.

UPDATE : 문제는

라요스가 옳은 길을 저를 설정 해결했다. 이 ... 나는 그것을 해결하는 방법 당신은 title 빈 문자열을 가지고 당신의 inserts 테이블의 모든 레코드가 있는지 여부를 확인하는

DECLARE @Title VARCHAR(45) 
SELECT @Title = TITLE FROM inserted 
IF @Title = '' 
    BEGIN 
    SET NOCOUNT ON; 
    RAISERROR('Missing TITLE',10,1) 
    ROLLBACK TRAN 

END 
+3

빈 문자열과 'NULL'은 완전히 다른 것입니다. –

답변

2

입니다. 나는 항상 그런 기록을 가지고 있기 때문에 그 조건이 사실이라고 생각합니다.

삽입 또는 업데이트 된 레코드의 title이 빈 문자열인지 확인하고 싶다고 생각합니다. 이러한 레코드에 대해 전체 테이블을 검색하는 대신 new.title이 빈 문자열인지 확인해야합니다.

+0

감사합니다. Lajos. 너 나를 똑바로 세웠다. 나는 새 것을 사용하지 않았다. 내 코드를 어떻게 변경했는지 보려면 업데이트 된 게시물을 참조하십시오. – user278859

+0

문제가 해결되어 다행입니다. –