Sql-Server

更改數據擷取與記錄更改的觸發器

  • December 12, 2016

我將創建由觸發器填充的歷史表(在插入、更新、刪除之後)。由於只有 20% 的列將被更新,我決定只記錄更改的值 - 如果值沒有更改,NULL則將在歷史表中使用值。例如:

在此處輸入圖像描述

歷史表列將是sparse,與記錄所有數據的普通實現相比,我將節省大量空間(這是由於我的測試和我的業務案例)。

作為我的SQL Server 2016 SP1 standard edition支持Change Data Capture,我想知道他們在使用它和基於觸發器的日誌記錄之間有什麼優點/缺點/差異嗎?

我檢查了一些文章(這里這裡),看不出還有什麼Change Data Capture可以給我的。

鑑於這兩件事之間的選擇,這就是我選擇觸發器的原因:

  • 觸發器可以同步進行相關表更改(例如,如果您需要更新報告表或檢查參照完整性)
  • 觸發器允許您以適合您的格式儲存數據,而 CDC 將其放在自己的 CDC 架構中,在可能不適用於您的報告的表中
  • 觸發器可以具有檢查更新類型或更新源的邏輯,並且只記錄您想要記錄的內容
  • 觸發器可以很容易地被暫時禁用,比如批量載入,或者如果企業面臨巨大的負載需求(比如黑色星期五銷售)
  • 觸發器讓您可以放入更多業務邏輯,例如,如果您想將某種歷史記錄放在一張表中,而將其他類型的歷史記錄放在另一張表中
  • 觸發器不會直接增加儲存成本(而 CDC 每行至少增加 34 個字節)

引用自:https://dba.stackexchange.com/questions/157893