+1 - спасибо. Это хороший случай (похожий на то, о чем говорит @Damien_The_Unbeliever) - который заставляет меня сейчас пересмотреть вопрос :-), чтобы провести различие между «наборами данных» и «наборами операторов выполнения»
я есть этот аргумент об использовании курсоров в TSQL недавно ...
Прежде всего, я не болельщик в дебатах. Но каждый раз, когда кто-то говориткурсорвсегда есть какой-то тупик (или 50), который набрасывается с обязательным«курсоры злые» мантра. Я знаю, что SQL-сервер был оптимизирован для операций, основанных на множествах, и, возможно, курсоры действительно являются воплощением зла, но если бы я хотел обдумать это объективно ...
Вот куда движется мой разум:
1) Единственная разница между курсорами и операциями над множествамипредставление?редактировать: Было сделано хорошее обоснование того, что это не просто вопрос производительности - например, многократный запуск одного пакета для списка идентификаторов или, альтернативно, выполнение реального текста SQL, хранящегося в строке таблицы, построчно -ряд.
2) Продолжение: делать курсорывсегда выступать хуже?РЕДАКТИРОВАТЬ: @Martin показывает хороший случай, когда курсоры значительно превосходят операции на основе множеств. Я подозреваю, что это было бы не то, что вы бы сделалислишком часто (до того, как вы обратились к какому-то решению OLAP / Data Warehouse), но, тем не менее, кажется, что вы действительно не можете жить без курсора.
- ссылка на ориентиры TPC предлагая курсорымай быть более конкурентоспособным, чем люди обычно считают.
- ссылка на оптимизацию использования памяти для курсоров с Sql-Server 2005
РЕДАКТИРОВАТЬ: Операции на основе множеств буквальноне можешь Execute
хранимые процедуры и т. д. (см. редактирование для пункта 1 выше).
РЕДАКТИРОВАТЬОперации на основе множеств экспоненциально медленнее, чем построчные, когда дело доходит до агрегирования больших наборов данных.
Главным образом, я хочу преобразовать курсоры в операции на основе множеств в моем старом коде, если / когда я делаю какие-либо существенные обновления для различных приложений, если есть что-то, что можно из этого извлечь. (Я склонен к лени из-за чистоты большую часть времени - то есть, если это не сломано, не исправляйте это.)