В T-SQL при повторении результатов из курсора представляется обычной практикой повторять оператор FETCH
перед циклом WHILE
. Ниже приведен пример из Microsoft:
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;
появляется дважды.)
Если FETCH
выбирает длинный список переменных, то мы имеем большой дублированный оператор, который является как уродливым, так и, конечно, кодом "не сухим".
Мне не известно о пост-условии-регуляторе T-SQL-инструкции, поэтому мне кажется, что мне нужно прибегнуть к WHILE(TRUE)
, а затем BREAK
, когда @@FETCH_STATUS
не равно нулю. Мне это неудобно.
Какие еще параметры у меня есть?