2017-02-22 24 views
0

変更追跡が有効なテーブルがあり、特定の主キーのテーブルの列を更新するとします。私が更新する値は、前にすでにあったものと同じ値です。値が変更されていない場合のCHANGE_TRACKING_IS_COLUMN_IN_MASK

docsを見ると、この関数は、列がコレクションchange_columnsにある場合はtrueを返します。

CHANGE_TRACKING_IS_COLUMN_IN_MASKは、次の値を返します。

0:指定された列がchange_columnsリストにありません。

1:指定された列は、change_columnsリストにあります。

リストlast_sync_version( ベースライン)以降に変更された列:furtherを探し

は、change_columnsリストは以下のように定義されるCHANGETABLE.SYS_CHANGE_COLUMNS性、ラッパーです。

どちらがあいまいですか。この文脈で「変更された」とは何を意味しますか?値が同じ場合は変更されていますか?

誰でも回答が分かりますか?

+0

私は、トラッキング機構を軽量に保つために前後の値を比較せず、columns_updated関数に似たメカニズム(厳密にはそうでない場合)を使用すると考えています。 –

+0

@BenThul - はい、私の疑惑でもありました。実際、私はそれを試してみました。本能に行く! –

答えて

0

実際の変更デルタの内容に関係なく、列の値が変更されたときにCHANGE_TRACKING_IS_COLUMN_IN_MASKがtrueを返すと報告できます。

+1

変更されていない場合でも、変更トラッキングでは変更の数や中間値ではなく、変更が発生したことだけを報告することを検討してください。したがって、あなたのすべての 'A'値が' 1'で始まると、 'UPDATE Tbl SET A = 2'と' UPDATE Tbl SET A = 1'のアップデートはあなたの非アップデートと区別できないので、とにかくその状況を処理する必要があります。 –

関連する問題