2017-02-22 9 views
0

Stellen Sie sich vor, ich habe eine Tabelle mit aktivierter Änderungsverfolgung, und ich aktualisiere eine Spalte der Tabelle für einen bestimmten Primärschlüssel. Der Wert, mit dem ich aktualisiere, ist der gleiche Wert wie bereits zuvor.CHANGE_TRACKING_IS_COLUMN_IN_MASK wenn sich der Wert nicht geändert hat

Mit Blick auf die docs, sagt MSDN, dass diese Funktion True zurückgibt, wenn die Spalte in der Auflistung change_columns ist.

CHANGE_TRACKING_IS_COLUMN_IN_MASK gibt die folgenden Werte zurück.

0: Die angegebene Spalte befindet sich nicht in der Liste change_columns.

1: Die angegebene Spalte befindet sich in der Liste change_columns.

Suchen further, die change_columns Liste ist ein Wrapper um die CHANGETABLE.SYS_CHANGE_COLUMNS Eigenschaft, die definiert ist als:

Listet die Spalten, die seit dem last_sync_version geändert haben (die Baseline).

Das ist mehrdeutig. Was bedeutet "verändert" in diesem Zusammenhang? Wenn der Wert gleich ist, hat es sich dann geändert?

Wer weiß die Antwort?

+0

Ich vermute, dass, um den Tracking-Mechanismus geringes Gewicht zu halten, es vergleicht nicht den Wert vor und nach, sondern verwendet einen Mechanismus ähnlich (wenn nicht genau) die columns_updated Funktion. –

+0

@BenThul - ja das wäre auch mein Verdacht gewesen. In der Tat habe ich es versucht und wir waren beide richtig. Instinkte gehen! –

Antwort

0

Ich habe es gerade versucht und kann das ja melden, CHANGE_TRACKING_IS_COLUMN_IN_MASK gibt True zurück, wenn ein Spaltenwert geändert wurde, unabhängig davon, was das tatsächliche Änderungsdelta war.

+1

Auch wenn dies nicht der Fall ist, bedenken Sie, dass die Änderungsverfolgung nur meldet, dass Änderungen aufgetreten sind, nicht wie viele Änderungen noch die Zwischenwerte. Wenn also alle deine 'A'-Werte mit' 1 'beginnen, sind die Aktualisierungen' UPDATE Tbl SET A = 2 'gefolgt von' UPDATE Tbl SET A = 1 'von deiner Nicht-Aktualisierung in der Frage nicht zu unterscheiden muss diese Situation sowieso bewältigen. –

Verwandte Themen