sql >> データベース >  >> RDS >> Sqlserver

SQL Server ではすべての更新が DELETE + (re)INSERT であるため、更新によって INSERT イベントがトリガーされますか?

    論理的には操作がまだ 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 |+-----------------+--------------------+-------- -------------------+

    1. タイムスタンプのフォーマット

    2. JSF+EJBアプリケーションでDB例外をキャッチする

    3. エラー:演算子が存在しません:数値〜*不明

    4. C# でユーザー定義テーブル型をストアド プロシージャ パラメータとして渡す方法