Главная » Microsoft SQL Server, Базы данных » Стратегии курсора

0

Ключевым моментом работы с курсорами является понимание того, когда использовать их, а когда искать решение с помощью пакетов. Если выполнить поиск совета на портале Google, он ответит примерно следующее: “Не используйте курсор, если хотя бы две недели безуспешно не поискали пакетное решение у знающих друзей и в группах новостей. Если по крайней мере три оппонента бросили от отчаяния поиск решения с помощью запросов, то можете приступать к написанию курсора”.

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

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

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

?               Динамические программные итерации, такие как генератор инструкций DDL. Для данного случая я не вижу лучшего решения, нежели курсор.

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

?               Создание перекрестного запроса. Это одна из задач, которые традиционно в SQL Server относили к разряду особо сложных. Создание такого запроса требует использования целого набора выражений CASE. Для создания динамического перекрестного запроса рекомендуется использовать курсор.

Дополнительная В главе 15 продемонстрирован ряд методов создания перекрестных запросов, информация Среди этих методов использование традиционных выражений case, метод кур- .. . .. -?                     сора и использование нового в SQL Server 2005 ключевого слова pivot.

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

Дополнительная О запросах СТЕ и прочих высокопроизводительных решениях задачи обхода информация иерархического дерева см. в главе 12.

Источник: Нильсен, Пол. Microsoft SQL Server 2005. Библия пользователя. : Пер. с англ. — М. : ООО “И.Д. Вильямс”, 2008. — 1232 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии