在单个语句中更新sql server行的多个列

时间:2015-11-16 15:36:14

标签: sql sql-server

嗨,我有一个临时表,如下所示。

create table #Temp_Test
(
id int,
prod int,
total int
)

insert into #Temp_Test (id,prod,total) 
values(1,10,20), (2,30,40), (3, 50,60)

我想更新ID&在一个声明中刺激 例如,我想更新prod&总计为30& 60其中id = 1.我正在使用以下查询来执行此操作:

update  #Temp_Test
set prod = 30 , total = prod*2
where id = 1

以上查询将我的产品更新为30&总共20,而不是我期望的60。 (Prod * 2只是一个例子,我可以在这里进行不同的计算Prod * 32,Prod * 7等)。

我需要做些什么更改才能工作(我想使用单个查询来完成,我知道如何使用多个更新查询使其工作)?

3 个答案:

答案 0 :(得分:2)

为了让下一个为此工作的人变得更好和清楚......

DECLARE @NewProd Int = 30
DECLARE @Qty Int = 2

UPDATE #Temp_Test SET 
  prod = @NewProd, 
  total = @Qty * @NewProd
WHERE 
  id = 1

答案 1 :(得分:0)

因为你有30& 60使用这些值:

update  #Temp_Test
set prod = 30 , total = 60
where id = 1

答案 2 :(得分:0)

SQL stanard不是免费提供的,但据我所知,它有点不清楚,但它更容易解释为说旧值应该用于评估语句中的所有表达式。

因此,如果你的意思是“不工作”,结果是'prod = 30,total = 40',这是正确的结果。如果你需要根据另一个列的新值计算一个列,可以在上面的层(连接到db的代码)中执行,也可以在两个查询中执行,包含在事务中。