2 Stimmen

Endlosschleife im T-SQL-Cursor

Nachfolgend finden Sie den Code für einen T-SQL-Cursor. Es funktioniert gut durch die erste Iteration, aber nach, dass in einer Endlosschleife zwischen der FETCH NEXT-Anweisung und der IF NOT EXISTS-Anweisung (im Grunde wird es den ersten Datensatz einfügen, aber nach, dass der Cursor nicht auf den nächsten Datensatz zu bewegen, so dass die IF NOT EXISTS ist ständig falsch) stecken bleibt. Ich verwende zum ersten Mal einen Cursor und hoffe, dass mir jemand erklären kann, was vor sich geht bzw. wie das Ganze funktioniert!

    DECLARE prod_cursor CURSOR FOR
    SELECT ProductCode 
    FROM CourseToProduct 
    WHERE CourseCode = @courseCode and (TerminationDate >= @expDate OR TerminationDate IS NULL)

    OPEN prod_cursor

    FETCH NEXT FROM prod_cursor
    INTO @productCode

    WHILE @@FETCH_STATUS = 0
    BEGIN
        IF NOT EXISTS
        (
        SELECT sNumber
        FROM AgentProductTraining
        WHERE @sNumber = sNumber and 
              @courseCode = CourseCode and 
              @productCode = ProductCode and 
              @dateTaken = DateTaken
        )
        BEGIN
            IF @sNumber IS NOT NULL
            BEGIN
                INSERT INTO AgentProductTraining
                            (
                             sNumber,
                             CourseCode,
                             ProductCode,
                             DateTaken,
                             DateExpired,
                             LastChangeOperator,
                             LastChangeDate
                            ) 
                VALUES      (
                             @sNumber,
                             @courseCode,
                             @productCode,
                             @dateTaken,
                             COALESCE(@expDate, 'NULL'),
                             @lastChangeOperator,
                             @lastChangeDate
                           )    
            END
        END
    END
    CLOSE prod_cursor;
    DEALLOCATE prod_cursor;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X