T-SQLでは、カーソルの結果を反復処理するときに、ループWHILE
の前にFETCH
ステートメントを繰り返すのが一般的なようです。 Microsoftからの例以下:カーソルを使用してT-SQLでFETCHが重複しないようにするにはどうすればよいですか?
DECLARE Employee_Cursor CURSOR FOR
SELECT EmployeeID, Title FROM AdventureWorks2012.HumanResources.Employee
WHERE JobTitle = 'Marketing Specialist';
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Employee_Cursor;
END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO
(FETCH NEXT FROM Employee_Cursor;
が2回表示方法に注目してください。)
をFETCH
は、その後、我々は醜いと、もちろん両方で大きな重複ステートメントを持って、変数の長いリストに選択した場合、 "非DRY"コード。
私が@@FETCH_STATUS
がゼロでないときWHILE(TRUE)
、その後BREAK
に頼る必要があるだろうと思われるので、私は、ポスト条件のフロー制御T-SQLステートメントを認識していませんよ。これは私には気難しい。
その他のオプションはありますか?
は、あなたが示した '' GOTO Employee_Cursor_Fetch'と場所ラベル 'Employee_Cursor_FetchでNEXT Employee_Cursor'からのフェッチ最初に置き換える:'すぐに'FETCH NEXT'を残す。ラベル名はカーソル名( 'Employee_Cursor')から派生していることに気付くことができます。 – miroxlav