簡體   English   中英

存儲過程-在沒有游標的情況下循環搜索結果

[英]Stored Procedure - loop through results without cursor

我環顧四周,我發現為了遍歷結果,您必須使用游標,並且在同一篇文章中有人說游標不好,不要使用它們(這一直是我的理念),但現在我陷入了困境。 我需要遍歷結果集!

這是情況。 我需要拿出一個ProductID列表,該列表將2種不同的狀態設置為一個特定值。 我啟動存儲過程,運行查詢以查找符合條件的產品。 因此,現在我有一個在驗證過程中需要運行的ProductID列表:

16050

16052

41817

48255

現在,我需要這些產品中的每一種(我可能不知道可能有1個,可能有1000個),以檢查整個條件列表:是特定字段='SIMPLE'嗎? 如果是這樣,請執行其他一系列查詢,並確保一切正常。如果不是“簡單”,則運行另一組查詢,並確保所有信息均正確。

是另一個字段=“是”嗎? 如果是這樣,請執行其他一系列查詢,如果不是,則執行其他查詢。

我需要使用游標嗎? 還有其他我不知道的事情來做嗎?

謝謝萊斯利

我最終使用了WHILE循環,可以將每個ProductID傳遞給一系列檢查!

declare @counter int
declare @productKey varchar(20)

SET @counter = (select COUNT(*) from ##Magento)

while (1=1) 
begin
SET @productKey = (select top 1 ProductKey from ##Magento)
print @productKey;
delete from ##Magento Where ProductKey = @productKey
SET @counter-=1;
  IF (@counter=0) BREAK;

end
go

在不知道流程細節的情況下很難說,但是一種方法是創建一個執行邏輯並調用它的函數。

例如:

delete from yourtable
where productid in (select ProductID from FilteredProducts)
and dbo.ShouldBeDeletedFunction(ProductID) = 1

通常,游標是不好的,但總是有例外。 嘗試通過集而不是單個記錄的屬性來避免它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM