我想看看它是否有可能在游标循环中执行更新,并且在循环的第二次迭代期间反映此更新的数据。如何在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