请选择 进入手机版 | 继续访问电脑版

sqlserver存储过程循环语句执行的很慢

[复制链接]
查看1890 | 回复1 | 2019-5-13 10:29:29 | 显示全部楼层 |阅读模式
USE [NetgmtFW]
GO
/****** Object:  StoredProcedure [dbo].[proc_WeChatChecktime_syn]    Script Date: 05/08/2019 16:42:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE proc [dbo].[sp_netgmt_Down_fw2]
as
BEGIN

                --查询未同步的数据 审核状态为空值,状态为SelectStatus=0 的数据,插入到临时表
                select identity(int,1,1)id,PuOrderNo as pp
                into #syn_TEMP
                from OPENQUERY(NETGMT, 'select * from PUOMSTR') A
                where A.DocStatus='' and A.SelectStatus='0'
               
            --定义变量
            declare @currentindex int,@totalrows int --保存期行数和总数
            declare @puoorderno VARCHAR(50)
            select @totalrows=COUNT(*) from #syn_TEMP
            select @currentindex=1
            
            while(@currentindex<=@totalrows)  --单条循环处理
            BEGIN  
              --同步处理
                select @puoorderno=pp from #syn_TEMP where id=@currentindex
                        INSERT ng_puostr(PuOrderNo)
            select @puoorderno
                update OPENQUERY(NETGMT, 'select * from PUOMSTR') set SelectStatus='1' where SelectStatus='0'  
                    select @currentindex=@currentindex+1;    --变量
              END
              drop table #syn_TEMP
END

上面代码中 的循环语句执行很慢,1000条记录要执行半个小时,这个语句该怎么优化?





上一篇:安装SqlServer出现问题 错误代码:0x84B20001
下一篇:MongoDB部署
回复

使用道具 举报

Docker | 2019-5-13 11:08:26 | 显示全部楼层
这个你应该自己想啊,对着SQL语句的优化原则。看看你当时建表的结构
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

14

主题

76

帖子

1185

积分

金牌会员

Rank: 6Rank: 6

积分
1185