如何更新 SQL 中游标获取的列

2024-03-04

在进一步讨论之前:是的,我知道与基于集合的操作相比,游标的性能很差。在这种特殊情况下,我在包含 100 条左右记录的临时表上运行游标,并且该临时表始终相当小,因此性能不如灵活性那么重要。

我的困难是我无法找到如何更新游标获取的列的示例。以前,当我使用游标时,我将值检索到变量中,然后根据这些值在每个步骤中运行更新查询。这次我想更新临时表中的一个字段,但我不知道该怎么做。

在下面的示例中,我尝试根据使用的查询更新临时表 #t1 中的 CurrentPOs 字段#t1.Product_ID查找所需的值。您将在代码中看到我尝试使用该符号curPO.Product_ID参考这个,但它不起作用。我还尝试对 curPO 使用更新语句,但也没有成功。

我可以通过获取变量来使代码工作,但我想知道如何直接更新字段。

我想我可能遗漏了一些明显的东西,但有人可以帮忙吗?

declare curPO cursor
for select Product_ID, CurrentPOs from #t1
for update of CurrentPOs
open curPO

fetch next from curPO

while @@fetch_status = 0
begin
    select      OrderQuantity = <calculation>,
                ReceiveQuantity = <calculation>
    into        #POs
    from        PurchaseOrderLine POL 
    inner join  SupplierAddress SA ON POL.Supplier_ID = SA.Supplier_ID
    inner join  PurchaseOrderHeader POH ON POH.PurchaseOrder_ID = POL.PurchaseOrder_ID
    where       Product_ID = curPO.Product_ID
    and         SA.AddressType = '1801'

    update curPO set CurrentPOs = (select sum(OrderQuantity) - sum(ReceiveQuantity) from #POs)

    drop table #POs

    fetch next from curPO
end

close curPO
deallocate curPO

经过更多的谷歌搜索后,我找到了部分解决方案。更新代码如下:

UPDATE #T1 
SET    CURRENTPOS = (SELECT SUM(ORDERQUANTITY) - SUM(RECEIVEQUANTITY) 
                     FROM   #POS) 
WHERE  CURRENT OF CURPO 

我仍然不得不使用FETCH INTO但是,要检索#t1.Product_ID并运行生成#POs的查询,所以我仍然想知道是否可以使用FETCH在其自己的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何更新 SQL 中游标获取的列 的相关文章

随机推荐