SQLServer之GOTO用法


GOTO會影響執行效率,不建議用。

CREATE PROC SP_BGY_PM_StateChangeApplication_CycleAnalysis
@FQID VARCHAR(256)---WN210225000071
AS
BEGIN        
        SELECT NEWID()AS PK,ProjectStatu,[FI_EndTime]  INTO #Temp_TTAA  FROM  BGY_PM_StateChangeApplication  WHERE FQ_ID=@FQID ORDER BY [FI_EndTime] ASC
        --SELECT NEWID()AS PK,ID,TITLE AS ProjectStatu,[Date] AS FI_EndTime INTO #Temp_TTAA FROM AATEST WHERE ID=2 ORDER BY [Date] ASC
        SELECT * FROM #Temp_TTAA
        DECLARE @CountNum INT 
        DECLARE @SountNum_Sub INT 

        DECLARE @Id VARCHAR(256)
        DECLARE @NodeName VARCHAR(256)
        DECLARE @TempTime DATETIME

        DECLARE @StartTime DATETIME
        DECLARE @EndTime DATETIME
        DECLARE @DaySum INT=0 INTIT: SELECT @CountNum=COUNT(0) FROM #Temp_TTAA
        --SELECT @CountNum
        WHILE(@CountNum>0)
        BEGIN
            SELECT TOP(1) @Id=PK,@NodeName=ProjectStatu,@TempTime=[FI_EndTime] FROM #Temp_TTAA
            IF(@NodeName='3' OR @NodeName='5')--2:進行中,3:暫停,5:已作廢
                BEGIN
                    SET @StartTime=@TempTime
                    SELECT @StartTime AS '暫停開始時間'
                    --SELECT * FROM #Temp_TTAA    
                    DELETE  FROM #Temp_TTAA WHERE PK=@Id----移除本次記錄
                    --SELECT * FROM #Temp_TTAA        
                    SELECT @SountNum_Sub=COUNT(0) FROM #Temp_TTAA
                    WHILE(@SountNum_Sub>0)
                        BEGIN                
                            SELECT TOP(1) @Id=PK, @NodeName=ProjectStatu,@TempTime=[FI_EndTime] FROM #Temp_TTAA
                            IF(@NodeName='2')
                                BEGIN
                                        SET @EndTime=@TempTime
                                        SELECT @EndTime AS '進行中開始時間'
                                        SET @DaySum=@DaySum+DATEDIFF(DAY,@StartTime,@EndTime)                                
                                        DELETE  FROM #Temp_TTAA WHERE PK=@Id
                                        SET @SountNum_Sub=0
                                        GOTO INTIT END
                            DELETE  FROM #Temp_TTAA WHERE PK=@Id
                            SELECT @SountNum_Sub=COUNT(0) FROM #Temp_TTAA
                        END    
                END
            DELETE FROM #Temp_TTAA WHERE PK=@Id ---非暫停,則刪除記錄
            SELECT @CountNum=COUNT(0) FROM #Temp_TTAA--繼續下一循環    
        END
        SELECT @DaySum ---BGY_PM_StateChangeApplication_CycleAnalysis
        IF EXISTS(SELECT 1 FROM BGY_PM_StateChangeApplication_CycleAnalysis WHERE FQID=@FQID)
        UPDATE BGY_PM_StateChangeApplication_CycleAnalysis SET Cycle=@DaySum,UpdateTime=GETDATE() WHERE FQID=@FQID
        ELSE
        INSERT INTO BGY_PM_StateChangeApplication_CycleAnalysis(FQID,Cycle,UpdateTime) VALUES(@FQID,@DaySum,GETDATE())
        
        DROP TABLE #Temp_TTAA---釋放臨時表

END

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM