我實際上是使用兩個遊標進行糟糕的設計(我意識到這一點,但後來任務很簡單,所以我沒有爲優化而煩惱)。我使用的是這樣的查詢:這裏如何避免歧義?
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
按鈕,我敢肯定,這個查詢是錯誤的,它會解救一個錯誤。從我所看到的,有兩個@@FETCH_STATUS
被使用。因此,除非在打開新光標之前將第一個@@FETCH_STATUS
的狀態保存在堆棧的某個位置,否則此查詢不應起作用。
有人可以告訴我這個查詢究竟是如何工作的嗎?我的主要問題是關於與@@FETCH_STATUS
進行多重比較檢查。我手動驗證了一些結果,但不確定這是否會因爲角落案例而失敗,或者查詢是否正確,SQL Server還在做其他事情。