SQL-更新查询仅更新一个字段

SQL-更新查询仅更新一个字段,sql,sql-server,Sql,Sql Server,我正在尝试根据某个条形码字段对我的库存表运行更新查询 库存表的模式 我尝试运行的查询是 Update tblStock set Quantity = Quantity + 10, Total = Quantity * PPrice where barcode = 'shandar' 执行此查询时,数量字段将更新,但总数字段保持不变,我想将数量与PPrice相乘 提前感谢。对于您的情况,一旦第一列“数量”被更新,更新语句将不会完成,但它必须更新第二列“总计”。因此,它从表中获取实际记录,而不是

我正在尝试根据某个条形码字段对我的库存表运行更新查询

库存表的模式

我尝试运行的查询是

Update tblStock set Quantity = Quantity + 10, Total = Quantity * PPrice where barcode = 'shandar'
执行此查询时,数量字段将更新,但总数字段保持不变,我想将数量与PPrice相乘


提前感谢。

对于您的情况,一旦第一列“数量”被更新,更新语句将不会完成,但它必须更新第二列“总计”。因此,它从表中获取实际记录,而不是更新的记录。否则,您可以将其拆分为两个不同列的更新

然后你需要这样做:

因为,在更新表时,SQL Server会考虑以前的数据,直到代码成功执行且没有任何错误

可以通过使用触发器使用插入和删除的表查看频繁更新/删除/插入的行/记录

Update tblStock set Quantity = Quantity + 10, Total = (Quantity + 10)* PPrice 
where barcode = 'shandar'

您可以使用
cross-apply
FROM
子句中定义新数量,然后使用该值:

Update s
    set Quantity = v.Quantity,
        Total = v.Quantity * s.PPrice
    from tblStock s cross apply
         (values (s.Quantity + 10)) v(quantity)
    where s.barcode = 'shandar';
重复一个简单的操作,比如
quantity+10
,这没什么大不了的。但是,如果计算更复杂,则只需执行一次即可

也就是说,您最好使用
total
作为计算列。那么它就是正确的——而且永远不需要更新。将其从表中删除,然后重新添加为:

alter table tblStock add total as ( quantity * pprice );

然后,
total
的值总是正确的,因为它是在查询表时计算出来的。

total=Quantity*PPrice
指的是更新之前的
Quantity
的现有值。你需要做
Total=(数量+10)*PPrice
Quantity=Quantity+10仅一次之后,我希望将更新的数量值乘以PPrice值,并根据条形码将其设置为总计。Quantity=Quantity+10仅一次之后,我希望将更新的数量值乘以PPrice值,并根据条形码将其设置为总计对于您的情况,更新第一列“数量”后,update语句未完成,但必须更新第二列“总计”。因此,它从表中获取实际记录,而不是更新的记录。否则,您可以将其拆分为两个不同列的更新。-@SMHasnainyeh这就是我刚才所做的。SQL不支持这种查询,这真的很奇怪,请更新您的答案,以便我对所有有帮助的内容进行投票。Quantity=Quantity+10仅在这之后一次,我想将更新的数量值乘以PPrice值,并根据条形码设置总数@斯哈斯奈。我没有领会你的意思。在这个答案中,
quantity+10
只出现一次。这就是答案的要点。更新仅针对一行。数量字段用数量+10更新,然后,它进一步移动到另一个字段,并用新更新的数量*PPrice值更新字段总值。@SMHasnain。这就是这个答案中的代码所做的。我重复:
quantity+10
在答案中只出现一次,而不是两次。当我使用该代码片段时,它会给我一个多部分错误,但是您所获得的有关计算字段的新信息非常有用,我需要阅读有关交叉应用的信息