2015-01-13 3 views

ответ

3

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

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

Цикл WHILE представляет собой конструкцию программирования, с которой вы, вероятно, знакомы с другими языками программирования. Вы определяете условие в начале цикла, и итерация будет выполняться до тех пор, пока это условие останется истинным.

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

WHILE петли не обеспечивают некоторые из колоколов и свистов, которые поставляются с курсорами, например, возможность легко «вернуться назад» в результирующий набор. Хотя, я никогда не был в ситуации, когда я делал что-то другое, кроме прямой петли, через результирующий набор с помощью курсора.

Одним из преимуществ цикла WHILE является то, что в памяти не должны создаваться никакие объекты, чтобы облегчить цикл через набор записей, как это необходимо с помощью курсора.

EDIT

Если вы хотите проанализировать функциональность обоих, вы можете написать заявление с курсором, а также во время цикла и проанализировать количество операций чтения выполняется с помощью SQL Server Profiler. Этот инструмент даст мне комбинированное объединение считываний, сделанных для каждой записи, а не для каждой отдельной записи. Правило большого пальца говорит, что лучше, лучше.

Смежные вопросы