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
在答案中只出现一次,而不是两次。当我使用该代码片段时,它会给我一个多部分错误,但是您所获得的有关计算字段的新信息非常有用,我需要阅读有关交叉应用的信息