2012-03-02 3 views
-1

Я новичок в TSQL/SQL, и я хочу узнать «While Loops» в TSQL/SQL. Есть ли хорошие сайты/книги, которые могут помочь улучшить мои знания в отношении «Петли». Ваш вклад очень ценится.TSQL/SQL - Loop

+10

Избегайте циклические конструкции в SQL и начать думать о множественных операциях. Конструкции Looping _expensive_ в SQL. – Oded

+0

Спасибо, Одед, сохранит этот ум. Любая идея относительно учебного материала. – Warne

+0

читайте онлайн-справку SSMS или просто google 'WHILE Transact-SQL' –

ответ

1

Вам не нужна книга - просто прочитайте на cursor functionality in T-SQL. Есть примеры кода, демонстрирующие цикл. Как говорит Одед, цикл является императивной конструкцией, тогда как SQL является декларативным языком - цикл в SQL «делает это неправильно», хотя функциональность существует, когда вам действительно нужно «делать это сейчас».

+0

Если вы вынуждены зацикливаться на SQL, используйте, по крайней мере, WHILE. НИКОГДА не используйте курсор! Курсоры в конечном итоге убьют вашу работу. Повторяю, НЕ используйте курсоры. –

+0

Спасибо за подсказку. Почитает обо всех этих темах и узнает, почему один лучше других. – Warne

+0

Я не согласен с комментарием, что CURSOR будут убивать вашу производительность только в том случае, если в некоторых случаях CURSOR - единственный способ пойти. Например, выполните операции на основе набора, создав динамическую строку SQL, которая создается из работы CURSOR. НИКОГДА не очень сильное слово. – wergeld

1

Цикл SQL почти такой же, как любой другой цикл программирования, как в, он работает до тех пор, пока данное условие больше не будет выполнено. Однако, как отметил Одед, SQL - это язык на основе SET, и он слабее как процедурный язык. Пожалуйста, обратитесь к статье this за дополнительной информацией о различии между процедурами, особенно в том, что касается SQL.

Итак, в заключение найдите способы перезаписи любых запросов цикла, чтобы они были более SET на основе группы данных за один раз. Если вы не можете, то, возможно, это скорее проблема для кода, а не SQL.

Хорошее решение, которое обычно можно избежать во время циклов и было хорошо реализовано командами SQL, приведено ниже. Будем надеяться, что это может помочь вам, если вы не можете пойти в код и все еще ищут эффективное решение в SQL

  • CTE, или общие выражения Таблица чрезвычайно сильны, особенно если вам нужно что-то вроде recursion
+0

Спасибо за ввод. Я думал о сценариях, например, как и для всех строк в таблице. Подобным случаям могут понадобиться петли. – Warne

+0

Я обновил свой ответ, чтобы указать вам направление CTE. Они часто являются более эффективным способом делать то, что вы обычно делали в циклах. Часто они объединяются с ROW_NUMBER() и PARTITION. Тем не менее, я бы повторно повторил попытку мыслить в логике SET, и если вы не можете создать решение таким образом (особенно, если вы ссылаетесь на строки «делаете» вещи), используйте код –

+0

. CTE может сделать трюк. Почитает об этом. Благодарю. – Warne

0

MSDN - это, как правило, лучшая онлайн-документация для чего-либо в стеке технологий Microsoft.

MSDN - While (Transact-SQL)

+0

Благодарим вас за ссылку. В целом, MSDN кажется хорошим местом для информации. – Warne