在继续之前:是的,我知道与基于集合的操作相比,游标的性能较差。在这种特殊情况下,我正在100个左右的临时表上运行游标,并且该临时表将始终很小,因此性能的重要性不如灵活性。
我的困难在于,我无法找到有关如何更新由游标获取的列的示例。以前,当我使用游标时,我已将值检索到变量中,然后根据这些值在每个步骤中运行更新查询。在这种情况下,我想更新临时表中的字段,但是我不知道该怎么做。
在下面的示例中,我试图基于#t1.Product_ID用于查找所需值的查询来更新临时表#t1中的CurrentPOs字段。您将在代码中看到我尝试使用该符号curPO.Product_ID来引用此符号的方法,但是它不起作用。我也曾尝试对curPO使用update语句,但也未成功。
#t1.Product_ID
curPO.Product_ID
我可以通过获取变量来使代码工作,但我想知道如何直接更新该字段。
我想我可能缺少明显的东西,但是有人可以帮忙吗?
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和运行生成#PO的查询,因此我仍然想知道是否可以单独使用FETCH。
FETCH INTO
FETCH