+1 - спасибо. Это хороший случай (похожий на то, о чем говорит @Damien_The_Unbeliever) - который заставляет меня сейчас пересмотреть вопрос :-), чтобы провести различие между «наборами данных» и «наборами операторов выполнения»

я есть этот аргумент об использовании курсоров в TSQL недавно ...

Прежде всего, я не болельщик в дебатах. Но каждый раз, когда кто-то говориткурсорвсегда есть какой-то тупик (или 50), который набрасывается с обязательным«курсоры злые» мантра. Я знаю, что SQL-сервер был оптимизирован для операций, основанных на множествах, и, возможно, курсоры действительно являются воплощением зла, но если бы я хотел обдумать это объективно ...

Вот куда движется мой разум:

1) Единственная разница между курсорами и операциями над множествамипредставление?

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

2) Продолжение: делать курсорывсегда выступать хуже?

РЕДАКТИРОВАТЬ: @Martin показывает хороший случай, когда курсоры значительно превосходят операции на основе множеств. Я подозреваю, что это было бы не то, что вы бы сделалислишком часто (до того, как вы обратились к какому-то решению OLAP / Data Warehouse), но, тем не менее, кажется, что вы действительно не можете жить без курсора.

- ссылка на ориентиры TPC предлагая курсорымай быть более конкурентоспособным, чем люди обычно считают.
- ссылка на оптимизацию использования памяти для курсоров с Sql-Server 2005

3) Есть ли проблемы, о которых вы можете подумать, что курсоры лучше подходят для решения, чем операции на основе множеств?

РЕДАКТИРОВАТЬ: Операции на основе множеств буквальноне можешь Execute хранимые процедуры и т. д. (см. редактирование для пункта 1 выше).
РЕДАКТИРОВАТЬОперации на основе множеств экспоненциально медленнее, чем построчные, когда дело доходит до агрегирования больших наборов данных.

Статья из MSDN объясняя их точку зрениясамый распространенный проблемы, к которым люди прибегают к курсорам (и некоторым объяснениям техник на основе множеств, которые будут работать лучше.)Microsoft говорит (смутно) вСправочник по Transact SQL 2008 в MSDN: «... бывают случаи, когда результаты лучше всего обрабатывать по одной строке за раз», но не приводятся примеры того, на какие случаи они ссылаются.

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

Ответы на вопрос(4)

Ваш ответ на вопрос