Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 更新时避免使用游标_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

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;