「$update_mask」フィールドの操作方法が非常に困難だったため (パフォーマンス上の理由から fn_cdc_is_bit_set を呼び出したくありません)、C# コードを次に示します。
- updateMaskは、CDC の「fn_cdc_get_all_changes_[table]」クエリの「__$update_mask」フィールドの内容です。
- colOrdinalは、変更フラグを取得する列の序数です (この値を取得するには、「n_cdc_get_column_ordinal」を使用します)。
結果は " hasChanged " フラグです。フィールドが更新で変更された場合、true に設定されます。
これは SQL Server 2008 および 2012 では機能しますが、将来のリリースでは機能しない可能性があることに注意してください。
byte[] updateMask = this.UpdateMask;
unchecked
{
byte relevantByte = updateMask[(updateMask.Length - 1) - ((colOrdinal - 1) / 8)];
int bitMask = 1 << ((colOrdinal - 1) % 8);
var hasChanged = (relevantByte & bitMask) != 0;
return hasChanged;
}