我想看看它是否有可能在遊標循環中執行更新,並且在循環的第二次迭代期間反映此更新的數據。如何在CURSOR循環內部提交?
DECLARE cur CURSOR
FOR SELECT [Product], [Customer], [Date], [Event] FROM MyTable
WHERE [Event] IS NULL
OPEN cur
FETCH NEXT INTO @Product, @Customer, @Date, @Event
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT * FROM MyTable WHERE [Event] = 'No Event' AND [Date] < @DATE
-- Now I update my Event value to 'No Event' for records whose date is less than @Date
UPDATE MyTable SET [Event] = 'No Event' WHERE [Product] = @Product AND [Customer] = @Customer AND [Date] < @DATE
FETCH NEXT INTO @Product, @Customer, @Date, @Event
END
CLOSE cur
DEALLOCATE cur
假設當SQL執行事件列爲空的所有記錄 在上面的SQL,我做遊標循環內選擇查詢MyTable的地方事件的值是「無事件」,但查詢返回即使我正在更新下一行,也沒有任何價值。 所以,我想如果甚至有可能更新一個表,更新的數據會反映在下一次迭代的遊標循環中。
感謝您的幫助, Javid
嗨, 以前記錄的原因,我不得不使用光標我將不得不計算基於事件列值的每個記錄均線(即無事件)。計算移動平均數以確定某些異常,並使用它將事件值設置爲「異常」。但是,如果我發現連續三次或更多次「異常」,我需要將它們全部重置爲「無事件」,因此,當計算下一個記錄的平均值時,需要使用以前的數據點。對不起,如果我讓你困惑。希望這些信息可以幫助.. – user320587 2010-05-21 17:58:40
@user:你可以請發佈一個示例記錄集和所需的輸出嗎? – Quassnoi 2010-05-21 18:03:27
最終的結果將是確定性的,它只是不確定性如何實現。如果碰巧按日期從大到小的順序處理行,與按升序排列的操作相比,所需的操作要少得多。 – 2013-03-20 09:12:17