Подтвердить что ты не робот

Как реализовать цикл do-while в tsql

Я пытаюсь понять, как реализовать это в TSQL

do 
  update stuff set col = 'blah' where that_row = 'the right one'
  select trash from stuff ...
until some_condition

Единственное итеративное предложение потока управления, предоставляемое Transact-SQL, - это while (condition) sentences, которое сначала оценивает условие, и если это условие истинно, тогда выполняйте предложение.

Я имею в виду сценарий, например, выполнение инструкции UPDATE по таблице до тех пор, пока не будет выполнено какое-то условие y, выполняемое последним UPDATE.

Самое главное, я ищу менее грязный подход к этой проблеме (Дублирование UPDATE до WHILE не имеет для меня слишком большого смысла, поскольку предложение UPDATE может быть сколь угодно длинным и сложным)


EDIT. Проблема, которую я пытаюсь решить, включает в себя несколько операторов UPDATE в одной таблице, каждая из которых принимает и преобразует значения из предыдущих итераций. Это невозможно сделать только в одном большом заявлении UPDATE, так как каждая строка будет оцениваться и обновляться только один раз, поэтому цикл - единственный способ, которым я могу понять, чтобы этот беспорядок работал.

4b9b3361

Ответ 1

Это эффективно цикл Do-While:

WHILE (1=1)
  BEGIN

  -- Do stuff...

  IF (some_condition is true)
     BREAK;

  END

Но, как заметил Джон Джоерн, всегда старайтесь сначала использовать подход, основанный на множестве. Я бы только прибегнул к циклу, если не могу придумать способ решения с помощью заданий.