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
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?