1 つの単純な操作を実行するトリガー (SQL 2008 R2) がありますが、結果は論理的ではありません。概要は次のとおりです。
テキスト ファイルは、「ORDERS_IN_PROCESS」テーブルにロードする 1 行 (1 レコード) の SSIS パッケージに供給されます。トリガーを起動できるように、[OLE DB Destination] で [Data Access Mode] を [Table or view] に設定します。
これが私のORDERSテーブルです:
OrderID ItemNo
--------- ---------
9813 1
9813 2
9813 3
9817 1
したがって、SSIS が実行され、ORDERS_IN_PROCESS は OrderID 9813 である 1 つのレコードを挿入します。
トリガーが起動されます:
INSERT INTO ORDERS_ARCHIVE SELECT * FROM ORDERS WHERE OrderID=INSERTED.OrderID
ここまではかなり単純...
ORDERS_ARCHIVE (ORDERS と同じレイアウト) テーブルで得られる結果は次のとおりです。
OrderId ItemNo
--------- ----------
9813 3
残りの 2 つの広告申込情報はどこにありますか?
ORDERS テーブルから読み取った最後の行のみを ORDERS_ARCHIVE に挿入したことに注意してください。
ORDERS_ARCHIVE に 3 つすべてが必要です。
なぜこれが起こるのですか?
SSISが「OLE DB宛先」を使用して処理する方法に関係があると思います.RLFLにレコードを手動で挿入すると、トリガーは本来の処理を正確に実行し、BACKから3つのレコードすべてを挿入するためです.
トリガーはバッチごとに 1 回起動すると主張するかもしれませんが、私も同意しますが、この場合、1 つのレコードのバッチしかありません。
私はspを考えていますが、おそらくそれほど些細なことに別のレベルの複雑さを追加したくありません。
何か案は?
ありがとう。