Чтобы ответить на ваш вопрос напрямую:
Мне еще не приходилось сталкиваться с ситуацией, когда операции над множествами не могли бы делать то, что в противном случае могло бы быть сделано с помощью курсоров.Тем не менее, существуют ситуации, когда использование курсоров для разбиения большой задачи на более управляемые куски является лучшим решением для обеспечения поддержки кода, ведения журналов, управления транзакциями и тому подобного.Но я сомневаюсь, что есть какие-то жесткие правила, чтобы сказать вам, какие типы требований приведут к тому или иному решению - отдельные базы данных и потребности просто слишком разные.
Тем не менее, я полностьюсогласиться с вашим подходом «если не сломано, не исправляйте».Рефакторинг процедурного кода для установки операций для процедуры, которая работает просто отлично, мало что дает.Тем не менее, хорошее эмпирическое правило - сначала искать решение, основанное на множествах, и заходить в процедурный код только тогда, когда это необходимо.Кишка чувствовать?Если вы используете курсоры более 20% времени, вы делаете что-то не так.
И то, что я действительно хочу сказать:
Когда яИнтервью с программистами. Я всегда задаю им пару довольно сложных вопросов SQL и прошу их объяснить, как они их решат.Это проблемы, которые, как я знаю, могут быть решены с помощью операций над множествами, и я специально ищу кандидатов, которые могут решить их без процедурных подходов (то есть курсоров).
Это , а не потому что я считаю, что в любом подходе есть что-то хорошее или более эффективное - разные ситуации дают разные результаты.Скорее потому, что, по моему опыту, программисты либо получают концепцию операций на основе множеств, либо нет.Если этого не произойдет, они потратят слишком много времени на разработку комплексных процедурных решений для проблем, которые можно решить гораздо быстрее и проще с помощью операций на основе множеств.
И наоборот, программист, который получает Операции на основе множеств почти никогда не имеют проблем с реализацией процедурного решения, когда это действительно необходимо.