7

on updateトリガーを作成しました。

1 つのステートメントでテーブル内の 5 つのレコードを更新する場合、トリガーは何回実行されますか? 単一のトランザクションでレコードを更新する複数のステートメントがある場合、変更はありますか?

5 回実行しますか、それともすべてのトランザクションが完了した後に 1 回だけ実行しますか?

4

3 に答える 3

11

それはすべて、使用しているトリガーのタイプによって異なります。

  • 行レベルのトリガーは、DML ステートメントの影響を受けるすべての行に対して発生します (これは、一度に複数の行を挿入するために複数行構文にINSERT基づくステートメントSELECTまたは複数行構文を使用しているステートメントにも当てはまります)。
  • ステートメント レベルのトリガーは、ステートメント全体に対して 1 回起動します。

Oracle、PostgreSQL、および DB2 は、行レベルとステートメント レベルの両方のトリガーをサポートしています。Microsoft SQL Server はステートメント レベルのトリガーのみをサポートし、MySQL は行レベルのトリガーのみをサポートします。

于 2012-07-03T16:20:31.983 に答える
4

SQL 2008 の場合: 5 行を更新する 1 回の更新を行う場合、トリガーは 1 回だけ実行する必要があります。

そのため、変更されたすべての行を検出できるようにするには、テーブル「INSERTED」および「DELETED」を使用する必要があります。

1 行を更新する更新を 5 回実行している場合、トリガーは 5 回実行されます。

于 2012-07-03T15:14:16.500 に答える
0

SQL Server を使用していることを考えると、トリガーは Update ごとに 1 回だけ起動します。

これが望ましくない場合は、別の更新ステートメントを使用して、トリガーが毎回確実に起動されるようにすることを検討できます。

SQLトリガーに関するこのチュートリアルを見ることができます。それはすべてをカバーしています。

Oracle を使用している場合、トリガーは行に基づくことができることに注意してください。SQL Server にはありません。

于 2012-07-03T15:13:37.507 に答える