論理的には操作がまだ UPDATE
であるため、物理的に挿入/削除として実装されていても、更新によって挿入イベントがトリガーされることはありません。 .
受け入れられた回答には、キー列の論理的な更新について話していると見なされた場合、まったく正しくないフレーズがあります.
これは、一意のインデックスに対する複数行の更新には当てはまりません。これらの SQL Server については、分割/並べ替え/折りたたむ オペレーター。したがって、次の例では、9 回の更新操作が 1 回の削除、8 回の更新、および挿入に変換されます。
CREATE TABLE TestingUpdate7 (ID INT,SomeString CHAR(50))CREATE UNIQUE CLUSTERED INDEX idx_ID ON TestingUpdate7 (ID)INSERT INTO TestingUpdate7 (ID, SomeString)VALUES(1,'One'),(2,' Two'),(3,'Three'),(4,'Four'),(5,'Five'),(6,'Six'),(7,'Seven'),(8,'Eight' ),(9,'Nine')CHECKPOINT -- ログを切り捨て、DB は単純復旧中です。UPDATE TestingUpdate7SET ID +=1SELECT Operation, Context, AllocUnitName FROM fn_dblog(NULL, NULL)
返品
<前>+-----------------+--------------------+---- -----------------------+|操作 |コンテキスト | AllocUnitName |+-----------------+--------------------+-------- -------------------+| LOP_BEGIN_CKPT | LCX_NULL |ヌル || LOP_XACT_CKPT | LCX_BOOT_PAGE_CKPT |ヌル || LOP_END_CKPT | LCX_NULL |ヌル || LOP_BEGIN_XACT | LCX_NULL |ヌル || LOP_DELETE_ROWS | LCX_MARK_AS_GHOST | dbo.TestingUpdate7.idx_ID || LOP_SET_BITS | LCX_PFS | dbo.TestingUpdate7.idx_ID || LOP_MODIFY_ROW | LCX_CLUSTERED | dbo.TestingUpdate7.idx_ID || LOP_MODIFY_ROW | LCX_CLUSTERED | dbo.TestingUpdate7.idx_ID || LOP_MODIFY_ROW | LCX_CLUSTERED | dbo.TestingUpdate7.idx_ID || LOP_MODIFY_ROW | LCX_CLUSTERED | dbo.TestingUpdate7.idx_ID || LOP_MODIFY_ROW | LCX_CLUSTERED | dbo.TestingUpdate7.idx_ID || LOP_MODIFY_ROW | LCX_CLUSTERED | dbo.TestingUpdate7.idx_ID || LOP_MODIFY_ROW | LCX_CLUSTERED | dbo.TestingUpdate7.idx_ID || LOP_MODIFY_ROW | LCX_CLUSTERED | dbo.TestingUpdate7.idx_ID || LOP_INSERT_ROWS | LCX_CLUSTERED | dbo.TestingUpdate7.idx_ID || LOP_COMMIT_XACT | LCX_NULL | NULL |+-----------------+--------------------+-------- -------------------+コード>