Как реализовать цикл do-while в tsql - PullRequest
29 голосов
/ 03 октября 2009

Я пытаюсь понять, как реализовать это в 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 над таблицей, пока не будет выполнено какое-либо условие, при котором будет выполнено последнее выполненное UPDATE.

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


РЕДАКТИРОВАТЬ : Проблема, которую я пытаюсь решить, включает несколько операторов UPDATE под одной и той же таблицей, каждый из которых принимает и преобразовывает значения из предыдущих итераций. Это невозможно сделать только в одном большом операторе UPDATE, поскольку каждая строка будет оцениваться и обновляться только один раз, поэтому цикл - единственный способ выяснить, как этот беспорядок должен работать.

1 Ответ

41 голосов
/ 03 октября 2009

Это фактически цикл Do-While:

WHILE (1=1)
  BEGIN

  -- Do stuff...

  IF (some_condition is true)
     BREAK;

  END

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...