2017-11-30 14 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; 

は変数@who = COALESCE(@who , '')を使用してSTRING_AGGエミュレーションは未定義の動作につながる可能性があることに注意してください(ORDER BYがある場合は特に中古)。

もう1つ:トリガーから電子メールを送信すると、パフォーマンス上の問題が発生する可能性があります。トリガーは「単純な」アクションを実行し、外部システムにはアクセスしません。

+1

存在を使用して働き始めます。ありがとう。 – user3435302

+0

@ user3435302私の答えを受け入れることを検討してください([回答の受け取りはどうしますか?](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)) :) – lad2025

関連する問題