0

テーブルへの挿入ごとにトリガーを実行します。このテーブルへの一括挿入を行うために、bulkcopy を使用しています。FireTriggers がテーブルでトリガーを起動することを読みましたが、挿入ごとではなく、一度だけ実行します。トリガーは、挿入された項目から一部のデータを取得し、それを別のテーブルに挿入します。他のテーブルに挿入された行は 1 つだけで、複数ではありません。オプションがありませんか?

var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default | SqlBulkCopyOptions.FireTriggers, transaction);
4

3 に答える 3

6

「挿入ごと」または「行」ごと?行ごとにトリガーが起動することを期待しているようです。

これは、トリガーに関する一般的な誤解です。つまり、トリガーは行ごとに 1 回起動します。彼らはしません。変更ごとに 1 回起動します。トリガーの本体内に「挿入済み」という仮想テーブルがあり、挿入された新しい行がすべて含まれています。データベースのトリガーが、このテーブルからすべてではなく、1 行だけを読み取っているように思えます。残念ながら、これは多くの人が SQL Server データベースにトリガーを実装する方法に共通する設計上の欠陥です。

于 2013-11-07T19:02:32.053 に答える
-1

SQLBulkCopy オブジェクトの作成中に、この SQLBulkCopyOptions.FireTriggers を追加します。

于 2015-09-15T13:27:43.940 に答える