Sql 更新时避免使用游标
由于游标的性能不太好,不使用游标是否有任何可能的方法更新发票付款映射表 您可以在一次更新中完成此操作。以下是相当推测性的,因为你的问题没有所有必要的细节。您可以在Sql 更新时避免使用游标,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,由于游标的性能不太好,不使用游标是否有任何可能的方法更新发票付款映射表 您可以在一次更新中完成此操作。以下是相当推测性的,因为你的问题没有所有必要的细节。您可以在update查询中使用join: +--------+-----------+-------+ | PartId | InvoiceId | Price | +--------+-----------+-------+ | 200 | 1000 | 10000 | | 201 | 1001 | 22000
update
查询中使用join
:
+--------+-----------+-------+
| PartId | InvoiceId | Price |
+--------+-----------+-------+
| 200 | 1000 | 10000 |
| 201 | 1001 | 22000 |
| 202 | 1002 | 30000 |
+--------+-----------+-------+
+--------+-----------+-------+
| PartId | PaymentId | Price |
+--------+-----------+-------+
| 200 | 1000 | 1000 |
| 200 | 1001 | 3000 |
| 201 | 1002 | 5000 |
+--------+-----------+-------+
+-----------+-----------+-------------------------+
| InvoiceId | PaymentId | Balance Need to be Paid |
+-----------+-----------+-------------------------+
| 1000 | 1000 | 9000 |
| 1000 | 1001 | 6000 |
| 1001 | 1002 | 17000 |
+-----------+-----------+-------------------------+
什么是发票映射表?您想如何更新它?您的问题不清楚。第三个表是发票付款映射表。。我想做的是,在一天结束时,我必须绘制地图,看看每一张发票需要支付多少余额。你的意思是说你有一个游标实现,并且想要改进它吗?如果是的话,请给我们代码。为什么还有第三张表?你就不能用你的两张桌子吗?如果目的是查看某些内容,只需创建一个视图。最初,映射表中不会有任何记录。一天结束时,我需要将记录添加到映射表中,并查看每个发票需要收集多少。现在清楚了吗?
update ip
set BalanceToBePaid = (i.price - p.sumprice)
from invoicepayment ip join
invoices i
on ip.invoiceid = i.invoiceid join
(select paymentid, sum(price) as sumprice
from payments
group by paymentid
) p
on ip.payment = p.payment;