yang2948443 2016-03-15 04:17 采纳率: 0%
浏览 2551
已结题

存储过程执行时间过长,怎么改进!求大神指导

 INAME(MONTH,@StartDate)+'-1'
                SET @EndTime=DATEADD(DAY,-1,DATEADD(MONTH,1,@StartTime));
                IF(@EndTime<=@EndDate)

                            SET @Days=365.0/12;

                        END
                    END                 
    AR(@StartTime));

me),YEAR(@StartTime));

                        END
                    END
MONTH,@StartDate)+'-1'
                SET @EndTime=DATEADD(DAY,-1,DATEADD(MONTH,1,@StartTime));
                IF(@EndTime<=@End)


                            BREAK;

                SET @num=0;

                    BEGIN
                        IF(@EndTime<=@EndDate)
                        BEGIN
                            IF(@num=0 AND @StartTime<@Start)
                            BEGIN
                                SET @Days=365.0/12-DATEDIFF(DAY,@StartTime,@Start);
                                INSERT INTO #Satistic VALUES (@Days,@CYRentArea,@Start,@EndTime,@Start,@End,@BuildingID,@ProjectID,MONTH(@Start),YEAR(@Start));
                            END
                            ELSE
                            BEGIN
                                SET @Days=365.0/12;
                                INSERT INTO #Satistic VALUES (@Days,@CYRentArea,@StartTime,@EndTime,@Start,@End,@BuildingID,@ProjectID,MONTH(@StartTime),YEAR(@StartTime));
                            END

                            SET @StartTime=DATEADD(MONTH,1,@StartTime);
                            SET @EndTime=DATEADD(DAY,-1,DATEADD(MONTH,1,@StartTime));
                            SET @num=@num+1;
                        END
                        ELSE IF(@StartTime<=@EndDate)
                        BEGIN
                            IF(@num=0 AND @StartTime<@Start)
                            BEGIN
                                SET @Days=365.0/12-DATEDIFF(DAY,@StartTime,@Start);
                                INSERT INTO #Satistic VALUES (@Days,@CYRentArea,@Start,@EndTime,@Start,@End,@BuildingID,@ProjectID,MONTH(@Start),YEAR(@Start));
                            END
                            ELSE
                            BEGIN
                                SET @Days=DATEDIFF(DAY,@StartTime,@EndDate)+1;
                                INSERT INTO #Satistic VALUES (@Days,@CYRentArea,@StartTime,@EndDate,@Start,@End,@BuildingID,@ProjectID,MONTH(@StartTime),YEAR(@StartTime));
                            END
                            BREAK;
                        END
                        ELSE
                        BEGIN
                            BREAK;
                        END
                    END
                END
                ELSE IF(@Start<=@EndDate)
                BEGIN
                    SET @Days=DATEDIFF(DAY,@Start,@EndDate)+1;
                    insert INTO #Satistic VALUES (@Days,@CYRentArea,@Start,@EndDate,@Start,@End,@BuildingID,@ProjectID,MONTH(@Start),YEAR(@Start));
                END
            END
            ELSE IF(@Start>=@StartDate AND @End<@EndDate)
            BEGIN
                SET @num=0;
                SET @StartTime=DATENAME(Year,@Start)+'-'+DATENAME(MONTH,@Start)+'-1'
                SET @EndTime=DATEADD(DAY,-1,DATEADD(MONTH,1,@StartTime));
                IF(@EndTime<=@End)
                BEGIN
                    WHILE(1=1)
                    BEGIN
                        IF(@EndTime<=@End)
                        BEGIN
                            IF(@num=0 AND @StartTime<@Start)
                            BEGIN
                                SET @Days=365.0/12-DATEDIFF(DAY,@StartTime,@Start);
                                INSERT INTO #Satistic VALUES (@Days,@CYRentArea,@Start,@EndTime,@Start,@End,@BuildingID,@ProjectID,MONTH(@Start),YEAR(@Start));
                            END
                            ELSE
                            BEGIN
                                SET @Days=365.0/12;
                                insert INTO #Satistic VALUES (@Days,@CYRentArea,@StartTime,@EndTime,@Start,@End,@BuildingID,@ProjectID,MONTH(@StartTime),YEAR(@StartTime));
                            END

                            SET @StartTime=DATEADD(MONTH,1,@StartTime);
                            SET @EndTime=DATEADD(DAY,-1,DATEADD(MONTH,1,@StartTime));
                            SET @num=@num+1;
                        END
                        ELSE IF(@StartTime<=@End)
                        BEGIN
                            IF(@num=0 AND @StartTime<@Start)
                            BEGIN
                                SET @Days=365.0/12-DATEDIFF(DAY,@StartTime,@Start);
                                INSERT INTO #Satistic VALUES (@Days,@CYRentArea,@Start,@EndTime,@Start,@End,@BuildingID,@ProjectID,MONTH(@Start),YEAR(@Start));
                            END
                            ELSE
                            BEGIN
                                SET @Days=DATEDIFF(DAY,@StartTime,@End)+1;
                                INSERT INTO #Satistic VALUES (@Days,@CYRentArea,@StartTime,@End,@Start,@End,@BuildingID,@ProjectID,MONTH(@StartTime),YEAR(@StartTime));
                            END
                            BREAK;
                        END
                        ELSE
                        BEGIN
                            BREAK;
                        END
                    END
                END
                ELSE IF(@Start<=@End)
                BEGIN
                    SET @Days=DATEDIFF(DAY,@Start,@End)+1;
                    INSERT INTO #Satistic VALUES (@Days,@CYRentArea,@Start,@End,@Start,@End,@BuildingID,@ProjectID,MONTH(@Start),YEAR(@Start));
                END
            END
        END
  • 写回答

1条回答

  • 大河行脚 2016-03-15 04:23
    关注

    这存储过程,还不如不用存储过程呢!

    评论

报告相同问题?

悬赏问题

  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划