2016-03-29 13 views
0
Update tmp 
SET BakColumn1 = Column1 
,Column1 = Column1 + ' Changed Value' 

更新列是否有任何保證,我總是會得到在備份列(BakColumn)的列1原來的內容,如果我的發言是像上面在MS-SQL 2008或更高版本?如果沒有,還有其他的方式嗎?還是我必須執行兩個單獨的交易?爲了在SQL

高於1度並行度(MAX-DOP)是否會導致問題?

+0

無論測試它會發生什麼,可能是每次都會發生。 –

+0

@TabAlleman我懷疑DoP在這裏扮演一個角色,這就是爲什麼要確定是否有人已經嘗試過或有具體的答案 – Asha

+4

我的理解是更新將被視爲原子操作,並且鎖定機制將保證始終使用正確的值。由於更新的原子性,並行度應該不重要。我還沒有找到任何好的參考,儘管如此,我可能在這方面是錯誤的。 – jpw

回答

0

是的,您可以保證您將始終在備份列中獲取Column1原始內容。

順序無關緊要。

爲此,您可以檢出列之間的交換值並驗證結果。

Update tmp 
SET BakColumn1 = Column1 
,Column1 =BakColumn1 

我覺得,這裏的關鍵是行的原始價值是暫時保持和參考貫穿始終。並行性僅僅是爲了提高性能,並不會改變功能行爲。如果你看到使用DOP的任何差異,那麼你可以報告一個錯誤 - :)

希望這會有所幫助。