私は実際には2つのカーソルを持つ悪いデザインを使用しています(私はそれを認識していますが、タスクは単純なので、最適化を気にしませんでした)。ここであいまいさは避けていますか?
DECLARE cursor1 CURSOR FAST_FORWARD FOR
SELECT DISTINCT name FROM #NameMeta;
OPEN cursor1;
FETCH NEXT FROM cursor1 INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE cursor2 CURSOR FAST_FORWARD FOR
SELECT DISTINCT place FROM #PlaceMeta;
OPEN cursor2;
FETCH NEXT FROM cursor2 INTO @place
WHILE @@FETCH_STATUS = 0
BEGIN
...
...
...
...
私は実際にExecute
ボタンをクリックするまでは、私はこのクエリが間違っていることをかなり確信していたし、それがエラーで救済すること:私はこのようなクエリを使用しています。私が見るところでは、2つの@@FETCH_STATUS
が使用されています。したがって、新しいカーソルを開く前に最初の@@FETCH_STATUS
の状態をスタックに保存しない限り、このクエリは機能しません。
このクエリがどのくらい正確に機能するか教えていただけますか?私の主な質問は、複数の比較チェックを@@FETCH_STATUS
とすることです。手動で手作業で手作業で検証しましたが、これがコーナーケースで失敗するか、クエリが正当なものであり、SQL Serverが何か他のことをしているかどうかはわかりません。