嗨我想更新列的某些值,可以更新過程中更改。例如如何使用更改值更新表
1: select * into #TempTable from (values ('a', 1), ('b', 1)) t (code, num)
2: select * from #TempTable
3: update tt set tt.code = 'b', tt.num = (
select max(oo.num) + 1 from #TempTable oo where oo.code = 'b')
from #TempTable tt
4: select * from #TempTable
5: drop table #TempTable
聲明2的輸出:是
code num
---- ---
a 1
b 1
和語句4:是
code num
---- ---
b 2
b 2
似乎如果UPDATE語句是靜態如,導致兩個 'B' 與NUM 2.我真正想要實現的是列號將通過整個UPDATE語句更改其值,即對於語句4:我預計輸出爲
code num
---- ---
b 2
b 3
你如何編寫查詢來實現?我想避免使用遊標,因此不依賴遊標的答案將被挑選出來。如果沒有遊標是不可能的,那麼只有使用遊標的答案纔會被選中。謝謝。
如果沒有光標作爲一般要求,這是不可能的。從概念上講,SQL更新「同時發生」。 「萬聖節保護」的概念就是確保在現實世界的執行計劃中不會發生這種情況。對於某些特定類型的要求 - 例如運行總計,但是可以使用窗口函數來得到相同的結果。 –