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