SQL Server のトリガーで使えるテーブルに、deleted と inserted というものがある。それぞれ「実行したSQL文で削除されたレコード」「実行したSQL文で削除されたレコード」が入ってくる。update文が実行された際には deleted には更新前/inserted には更新後のレコードがそれぞれ入る。

そういったトリガーで、ちと複雑なのを作った。そうすると、対象レコード件数が多く、かつ連鎖するトリガーを一気に実行するようにしている場合にのみ不具合が起こった。(詳細は今のところ省く。)

おそらくは、deleted や inserted の領域が「実行されたトリガーで独立しているのか、それとも共用しているのか」の差だろう。独立していればこの事象は起きないはずだ。

もしかすると、トリガー内でトランザクション実行できれば(できたっけ?)解決するのかも知れないが、今のところ別の解決策で逃げている。

時間があればじっくり実験するのだが・・・・。