嗨,我有一个临时表,如下所示。
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等)。
我需要做些什么更改才能工作(我想使用单个查询来完成,我知道如何使用多个更新查询使其工作)?
答案 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的代码)中执行,也可以在两个查询中执行,包含在事务中。