以下は、T-SQL カーソルのコードです。最初の反復では問題なく動作しますが、その後は FETCH NEXT ステートメントと IF NOT EXISTS ステートメントの間の無限ループに陥ります (基本的には最初のレコードを挿入しますが、その後カーソルは次のレコードに移動しません)したがって、IF NOT EXISTS は常に false です)。カーソルを使用するのはこれが初めてなので、誰かが何が起こっているのか/このことを機能させる方法を説明できることを望んでいました!
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;