如何使用更改值更新表

时间:2015-07-12 13:06:48

标签: sql-server sql-server-2008 sql-server-2012

您好我想将列更新为可在更新期间更改的某些值。 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

如何编写查询来实现这一目标?我想避免使用游标,因此不依赖游标的答案将被选中。如果没有光标不可能,那么只有光标的答案才会被选中。谢谢。

1 个答案:

答案 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