您好我想将列更新为可在更新期间更改的某些值。 e.g。
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.我真正想要实现的是列num将通过整个UPDATE语句更改其值,即对于语句4:我期望输出为
code num
---- ---
b 2
b 3
如何编写查询来实现这一目标?我想避免使用游标,因此不依赖游标的答案将被选中。如果没有光标不可能,那么只有光标的答案才会被选中。谢谢。
答案 0 :(得分:-1)
;WITH CTE AS (
SELECT Code
, Num
, Num + ROW_NUMBER() OVER (ORDER BY Num ASC) rn
FROM #TempTable )
UPDATE CTE
SET Code = 'b'
,Num = rn