0

このトリガーは別のSQLサーバー/データベースで正常に機能していました..今は何もしません.セットアップに必要な前提条件や、これが機能しない理由のアイデア..SQL Server 2008

create trigger Autoupdate6 -- Creating Trigger
On NumericSamples
For Insert
As
Insert Into BM1OILT
Select SampleDateTime, SampleValue From NumericSamples 
Where TagID = 8 and UpdateC = 0
UPDATE NumericSamples set UpdateC = 1 WHERE TagID = 8
go

ありがとう、

テーブルに挿入していたプログラムは、トリガーを渡すことで一括挿入を行っていたことがわかりました..トリガーの代わりにジョブを使用しました。私と一緒にこれを理解しようとしてくれた Aaron Bertrand に感謝します。

4

1 に答える 1

0

これにより、トリガーがテーブル全体を操作しようとするのを防ぎます。

CREATE TRIGGER dbo.Autoupdate6
ON dbo.NumericSamples
FOR INSERT
AS
BEGIN
  INSERT INTO dbo.BM1OILT(...column names here please...)
    SELECT SampleDateTime, SampleValue FROM inserted
    WHERE TagID = 8 AND UpdateC = 0;

  UPDATE n SET UpdateC = 1
    FROM dbo.NumericSamples AS n
    INNER JOIN inserted AS i
    ON n.SampleDateTime = i.SampleDateTime
    WHERE n.UpdateC = 0 AND n.TagID = 8;
END
GO

句を使用してこれを 1 つのステートメントに折りたたむことができるかもしれませんがOUTPUT、構成可能な DML には非常に多くの制限があるため、環境が制限の対象ではないことがわかっていない限り、通常は無駄な作業になります。

于 2013-10-09T21:27:06.970 に答える