2017-02-22 32 views
0

想象一下,我有一個啓用了更改跟蹤的表,並且我爲給定的主鍵更新了一列表。我更新的值與之前已經存在的SAME值相同。CHANGE_TRACKING_IS_COLUMN_IN_MASK當值沒有改變時

查看docs,MSDN表示如果該列位於集合change_columns中,此函數將返回true。

CHANGE_TRACKING_IS_COLUMN_IN_MASK返回以下值。

0:指定的列不在change_columns列表中。

1:指定的列位於change_columns列表中。

展望further,在change_columns列表是圍繞CHANGETABLE.SYS_CHANGE_COLUMNS屬性,它被定義爲一個包裝:

列出自last_sync_version(在 基線)已更改的列。

這是不明確的。在這種情況下,「改變」是什麼意思?如果這個值是相同的,那麼它是否改變了?

任何人都知道答案?

+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'就不會與問題中的非更新區分開來,所以你會無論如何都需要處理這種情況。 –