Quantcast
Channel: Forum Getting started with SQL Server
Viewing all articles
Browse latest Browse all 7129

How can I replace the cursor in the below query?

$
0
0

I have this below query which calls a stored procedure that takes only 1 item's attributes at a time. But because of performance problems we are required to remove the cursor. How can I replace the below cursor logic with set operations or CTE? Please advice.

DECLARE db_cursor_ava CURSOR
    FOR
        SELECT t.[agent-id],
               t.[start-date],
               t.[end-date],
               t.[monitor-days],
               t.[monitor-start],
               t.[monitor-end],
               t.[timezone-offset]
        FROM   @tmpAgentPeriodTimeRange t

    OPEN db_cursor_ava
    FETCH NEXT FROM db_cursor_ava INTO @agentID_ava,
    @stDateTime_ava,
    @endDateTime_ava,
    @monDays_ava,
    @monSt_ava,
    @monEnd_ava,
    @offset_ava

    WHILE @@FETCH_STATUS = 0
    BEGIN
        DELETE
        FROM   @tmpMonitorPeriod

        DELETE
        FROM   @tmpFinalResult

        SET @runID = 1

        IF(@endDateTime_ava>DATEADD(MI,@offset_ava, GETUTCDATE()))
        BEGIN
            SET @endDateTime_ava=DATEADD(MI,@offset_ava, GETUTCDATE())
        END


        INSERT INTO @tmpMonitorPeriod
        EXEC core.usp_GetMonitoringPeriod
             @startDate = @stDateTime_ava,
             @endDate = @endDateTime_ava,
             @monitoringDays = @monDays_ava,
             @monitoringStart = @monSt_ava,
             @monitoringEnd = @monEnd_ava

        SELECT @maxID = MAX(tm.id)
        FROM   @tmpMonitorPeriod tm



        FETCH NEXT FROM db_cursor_ava INTO @agentID_ava,
        @stDateTime_ava,
        @endDateTime_ava,
        @monDays_ava,
        @monSt_ava,
        @monEnd_ava,
        @offset_ava
    END

    CLOSE db_cursor_ava
    DEALLOCATE db_cursor_ava


mayooran99


Viewing all articles
Browse latest Browse all 7129

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>