Bil*_*ous 4 sql t-sql sql-server
在我进一步讨论之前:是的,我知道与基于集合的操作相比,游标表现不佳.在这种特殊情况下,我在一个包含100个左右记录的临时表上运行游标,并且该临时表总是相当小,因此性能不如灵活性重要.
我的困难在于我无法找到如何更新游标提取的列的示例.以前,当我使用游标时,我已将值检索到变量中,然后根据这些值在每个步骤运行更新查询.在这种情况下,我想更新临时表中的字段,但我无法弄清楚如何做到这一点.
在下面的示例中,我正在尝试根据#t1.Product_ID用于查找所需值的查询更新临时表#t1中的字段CurrentPO .您将在代码中看到我尝试使用符号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
Run Code Online (Sandbox Code Playgroud)
Bil*_*ous 11
在做了一点谷歌搜索后,我找到了部分解决方案.更新代码如下:
UPDATE #T1
SET CURRENTPOS = (SELECT SUM(ORDERQUANTITY) - SUM(RECEIVEQUANTITY)
FROM #POS)
WHERE CURRENT OF CURPO
Run Code Online (Sandbox Code Playgroud)
FETCH INTO但是,我仍然必须使用检索#t1.Product_ID和运行产生#PO的查询,因此我仍然想知道它是否可以自己使用FETCH.
| 归档时间: |
|
| 查看次数: |
59555 次 |
| 最近记录: |