2017-11-30 1 views
1

삽입, 업데이트 후 TableA에 트리거가 있습니다. 삽입시 정보가 테이블 변수에 삽입됩니다. 조건이 맞으면 선택에서 복구 된 것이므로 프로 시저가 실행됩니다.트리거 - @table에 삽입 @table의 @@ rowcount> 0 인 경우 프로 시저를 삽입하고 실행하십시오.

@ds이 null 인 경우 절차가 실행되지 않습니다. 어떤 제안?

나는이 시도했지만 작동하지 않았다

.... 
SET @dif = (SELECT ISNULL(COUNT(*), 0) FROM @ds); 

IF @dif > 0... 

감사합니다!

CREATE TRIGGER t_tablaA 
ON tablaA 
AFTER INSERT, UPDATE 
AS 
BEGIN 
    DECLARE @ds TABLE (d VARCHAR(50)); 
    @who VARCHAR(MAX); 

    INSERT INTO @ds 
     SELECT p.email 
     FROM inserted 
     INNER JOIN personel p ON inserted.user = p.user 

    IF @@rowcount > 0 
     SELECT @who = COALESCE(@who , '') + d + '; ' 
     FROM @ds 

    EXECUTE sendEmailTo(@who); 
END; 

답변

0

당신은 아마 BEGIN .. END 누락 :

if @@rowcount > 0 
BEGIN 
select @who = COALESCE(@who , '') + d + '; ' FROM @ds; 
execute sendEmailTo(@who); 
END; 

나 :

IF EXISTS (SELECT 1 FROM @ds) 
BEGIN 
select @who = COALESCE(@who , '') + d + '; ' FROM @ds; 
execute sendEmailTo(@who); 
END; 

하는 STRING_AGG 에뮬레이션 변수 @who = COALESCE(@who , '')를 사용하여 정의되지 않은 동작이 발생할 수 있음을 유의 (ORDER BY은 특히 익숙한).

또 다른 한 가지 : 트리거에서 이메일을 보내면 성능 문제가 발생할 수 있습니다. 트리거는 "단순한"동작을 수행하고 외부 시스템에 액세스하지 않아야합니다.

+1

존재를 사용하고 작동합니다. 감사. – user3435302

+0

@ user3435302 내 대답을 수락하는 것을 고려하십시오 ([대답 수락 방법은 무엇입니까?] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)) :) – lad2025

관련 문제