在我看來,如果在更新語句中有相互依賴的字段,我不確定是否可以保證排序(或者需要!)。排序對於SQL更新中的字段是否重要?
舉個例子,假設您有以下更新:
UPDATE Table
SET NewValue = OldValue, OldValue = NULL
會的NewValue隨時更新,然後再OLDVALUE廢止?或者,在處理過程中,行(或集合或表等)的狀態是不可變的,以便在計算更改之後纔會提交所有更改?
在我看來,如果在更新語句中有相互依賴的字段,我不確定是否可以保證排序(或者需要!)。排序對於SQL更新中的字段是否重要?
舉個例子,假設您有以下更新:
UPDATE Table
SET NewValue = OldValue, OldValue = NULL
會的NewValue隨時更新,然後再OLDVALUE廢止?或者,在處理過程中,行(或集合或表等)的狀態是不可變的,以便在計算更改之後纔會提交所有更改?
創建一個新的虛擬行,然後它以原子方式替換現有的行。您可以訪問所有現有值直到提交數據。
編輯順便說一句,這不是一個不尋常的情況。
爲什麼你不會簡單地運行這兩個單獨的查詢?
begin transaction
UPDATE Table
SET NewValue = OldValue
UPDATE Table
SET OldValue = NULL
commit
or this is homework?
我認爲Codex問的是錯誤的問題,但我認爲egrunin和Thomas回答了它。 – 2010-04-27 21:54:01
是的,我的問題可能措辭不佳。我現在正在這樣做,但我想知道是否我不能將這些查詢結合在一起,只是一次完成。正如Egrunin和Thomas所闡述的那樣,我認爲你可以,但我不確定如何檢查。 不,這不是一項家庭作業,這是一個寫作工作查詢時出現的問題,我當時沒有答案。 – CodexArcanum 2010-04-28 19:20:10
是的,系統會在執行查詢之前將NewValue更新爲OldValue中存在的值,然後將OldValue設置爲null。事實上,你可以像這樣交換數值:
UPDATE Table
SET NewValue = OldValue, OldValue = NewValue
不,我不會認爲這很奇怪,只是一點也不確定在哪裏尋找關於如何工作的答案。看起來就像你第一次學習SQL(低級細節)時所學的東西,或者根本就沒有。感謝你和托馬斯讓我直面這件事。 – CodexArcanum 2010-04-28 19:21:39