sqlserver 循环提升效率
--游标 DECLARE @OrderID int DECLARE cursor_CostValue CURSOR FOR SELECT OrderID FROM Orders OPEN cursor_CostValue FETCH NEXT FROM cursor_CostValue INTO @OrderID WHILE @@FETCH_STATUS = 0 BEGIN UPDATE Orders SET CostValue = OrderID+100 WHERE OrderID = @OrderID FETCH NEXT FROM cursor_CostValue INTO @OrderID END CLOSE cursor_CostValue DEALLOCATE cursor_CostValue --While循环 --将数据放在临时表中,然后操作临时表,最后更新回总表。耗时16s。效率高 DECLARE @RowID int -- 获取待处理的数据记录到临时表 -- 字段说明:RowID:记录行号 / DealFlg:行处理标识 SELECT RowID = IDENTITY(INT , 1, 1),DealFlg=0,OrderID,CostValue = 0 INTO #Tmp FROM Orders SELECT @RowID = MIN(RowID) FROM #Tmp WHERE DealFlg = 0 -- 若最小行号不为空(有需要处理的数据) WHILE @RowID IS NOT NULL BEGIN UPDATE #Tmp SET DealFlg = 1,CostValue=OrderID+100 WHERE RowID = @RowID SELECT @RowID = MIN(RowID) FROM #Tmp WHERE DealFlg = 0 END update O set O.CostValue=T.CostValue from Orders O inner join #Tmp T on O.OrderID=T.OrderID
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界