在一条语句中更新sql server行的多列

在一条语句中更新sql server行的多列,sql,sql-server,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 例如,我想将prod&total更新为30&60,其中id=1。我正在使用以下查询进行更新: update #Temp_Test set prod = 30

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

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 例如,我想将prod&total更新为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等等)


我需要做哪些更改才能使其工作(我想使用一个查询,我知道如何使用多个更新查询使其工作)?

因为您有30和60个使用这些值:

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

SQL标准不是免费提供的,但据我所知,在这方面有点不清楚,但将其解释为旧值应用于计算语句中的所有表达式要容易得多


因此,如果你所说的“不工作”是指结果为“prod=30,total=40”,那么这就是正确的结果。如果您需要根据另一列的新值计算一列,可以在上面的层(连接到db的代码)中进行计算,也可以在两个查询中进行计算,并封装在一个事务中。

为了让下一个来处理它的人清楚明了

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

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

也许你可以定义不工作?这里没有语法错误。更新在更新之前对表值起作用,即设置总计时将使用prod=10。顺便问一下:为什么要将值存储在可以从另一列(“prod*2”)计算的列(“总计”)中?