Есть ли какой-либо метод для реализации do while
цикла в SQL Server 2008?
sql-server
sql-server-2008
loops
while-loop
do-while
Нитеш Нараянан
источник
источник
Ответы:
Я не уверен насчет DO-WHILE в MS SQL Server 2008, но вы можете изменить логику цикла WHILE, чтобы ИСПОЛЬЗОВАТЬ как цикл DO-WHILE.
Примеры взяты отсюда: http://blog.sqlauthority.com/2007/10/24/sql-server-simple-example-of- while-loop-with-continue-and-break-keywords/
Но старайтесь избегать петель на уровне базы данных. Ссылка .
источник
Если вас не очень обидело
GOTO
ключевое слово, его можно использовать для имитации вDO
/WHILE
в T-SQL. Рассмотрим следующий довольно бессмысленный пример, написанный псевдокодом:Вот эквивалентный код T-SQL с использованием goto:
Обратите внимание на соответствие между
GOTO
включенным решением и исходнымDO
/WHILE
псевдокодом. Аналогичная реализация с использованиемWHILE
цикла будет выглядеть так:Теперь вы, конечно, можете переписать этот конкретный пример как простой
WHILE
цикл, так как это не такой уж хороший кандидат для конструкцииDO
/WHILE
. Акцент был сделан на краткости примера, а не на применимости, поскольку законные случаи, требующиеDO
/WHILE
, редки.REPEAT / UNTIL, кто-нибудь (НЕ работает в T-SQL)?
... и
GOTO
решение на основе T-SQL:Благодаря творческому использованию
GOTO
и логической инверсии с помощьюNOT
ключевого слова существует очень тесная связь между исходным псевдокодом иGOTO
основанным на нем решением. Аналогичное решение с использованиемWHILE
цикла выглядит так:Можно привести аргумент, что для случая
REPEAT
/ решениеUNTIL
наWHILE
основе проще, потому что условие if не инвертируется. С другой стороны, он более подробный.Если бы не все пренебрежение к использованию
GOTO
, это могло бы быть даже идиоматическим решением для тех немногих случаев, когда эти конкретные (злые) конструкции цикла необходимы в коде T-SQL для ясности.Используйте их по своему усмотрению, стараясь не страдать от гнева своих товарищей-разработчиков, когда они поймают вас на использовании того, что так оскорбительно
GOTO
.источник
Кажется, я припоминаю, что читал эту статью не один раз, и ответ близок только к тому, что мне нужно.
Обычно, когда я думаю, что мне понадобится
DO WHILE
T-SQL, это потому, что я повторяю курсор и ищу в основном оптимальную ясность (а не оптимальную скорость). В T-SQL это похоже наWHILE TRUE
/IF BREAK
.Если именно такой сценарий привел вас сюда, этот фрагмент может сэкономить вам время. В противном случае, добро пожаловать, я. Теперь я могу быть уверен, что был здесь не раз. :)
К сожалению, кажется, что T-SQL не предлагает более чистого способа одиночного определения операции цикла, чем этот бесконечный цикл.
источник
Вы также можете использовать переменную выхода, если хотите, чтобы ваш код был более читабельным:
Это, вероятно, будет более уместно, если у вас более сложный цикл и вы пытаетесь отслеживать логику. Как указано, циклы дороги, поэтому попробуйте использовать другие методы, если можете.
источник
Только цикл пока официально поддерживается SQL-сервером. Уже есть ответ на цикл DO while. Я подробно рассказываю о способах достижения различных типов циклов на SQL-сервере.
Если вы знаете, что вам все равно нужно завершить первую итерацию цикла, вы можете попробовать версию SQL-сервера DO..WHILE или REPEAT..UNTIL .
DO..WHILE цикл
REPEAT..UNTIL Цикл
Цикл FOR
Ссылка
источник