1

何百万もの挿入を含むテーブルのトリガーを作成する必要があります。

そのトリガーは、テーブルに電力が供給されていることを示す電子メール (既に実行済み) を私に送信します。

そのメールは、挿入の開始時に 1 回だけ送信する必要があります (1 日 1 回)。

言い換えれば、私はこれをしたい:

Create trigger on table T1 on FIRST INSERT; EXEC my procedure to send email

開発者ではないので、これを書く方法が本当にわかりません...

助けてくれてありがとう。

4

3 に答える 3

1

簡単にON FIRST INSERTトリガーを行うことはできません。

あなたができることはこれです:

  • ON INSERTメールを送信する通常のトリガーを作成します
  • そのトリガーの最後で、そのトリガーを無効にします。

    ALTER TABLE dbo.YourTable DISABLE TRIGGER YourTriggerNameHere
    

これにより、トリガーが何度も起動して大量の電子メールが送信されるのを防ぐことができます。

次に、夜間にそのトリガーを再度有効にする SQL エージェント ジョブも必要になります。これにより、翌日の最初の挿入で再び起動できるようになります。

更新: OK、あなたの場合は次のようになります:

CREATE TRIGGER sendMail 
ON MyTable AFTER INSERT 
AS 
    EXEC master.dbo.MyProcedure 

    ALTER TABLE dbo.MyTable DISABLE TRIGGER sendMail

また、夜間の SQL エージェント ジョブでは、次のものが必要になります。

ALTER TABLE dbo.MyTable ENABLE TRIGGER sendMail
于 2013-02-15T16:05:26.763 に答える
1

メールが最後に送信されたときにトリガーで更新するテーブルを用意してみませんか? 次に、トリガーでこのテーブルをクエリして、別のテーブルを送信するかどうかを決定できます。

create trigger tr
on tab after insert
as
begin
    declare @today datetime;
    set @today = cast(convert(varchar(32), getdate(), 112) as datetime);

    if not exists(select * from logtab where logdate = @today)
    begin
        -- Send the email
        exec sendMail

        -- Update Log Table
        update logtab
            set logdate = @today
    end
end
GO
于 2013-02-15T17:24:48.817 に答える
0

最初の更新時にトリガーを直接起動することはできません。

ただし、メールを送信したときにどのテーブルに対してログを記録するテーブルを作成することもできます。トリガーでは、その日のレコードがあるかどうかを尋ねることができます。そうでない場合は、そのテーブルに挿入して sp.

あなたのspもこのチェックを行うことができます。

于 2013-02-15T15:59:28.353 に答える