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;