[英]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.