¿Cuándo son los cursores de TSQL la mejor o la única opción?

Tengo este argumento sobre el uso de cursores en TSQL recientemente ...

Primero, no soy una animadora en el debate. Pero cada vez que alguien dicecurso, siempre hay algunos tontos (o 50) que se lanzan con la obligatoria 'los cursores son malvados' mantra. Sé que SQL-Server fue optimizado para operaciones basadas en conjuntos, y tal vez los cursores realmente SON una encarnación malvada, pero si quisiera poner algo de pensamiento objetivo detrás de eso ...

Aquí va mi mente:

1) Es la única diferencia entre los cursores y las operaciones de configuración una deactuació?

Edita: Se ha hecho un buen caso para que no sea simplemente una cuestión de rendimiento, como ejecutar un solo lote una y otra vez para obtener una lista de identificadores, o alternativamente, ejecutar texto SQL real almacenado en una fila de campo de tabla. por fila.

2) Seguimiento: hacer cursoressiempr peor desempeño

EDITA: @Martin muestra un buen caso en el que los cursores superan dramáticamente las operaciones basadas en conjuntos. Sospecho que este no sería el tipo de cosas que haríastambié a menudo (antes de recurrir a algún tipo de solución OLAP / Data Warehouse), pero no obstante, parece un caso en el que realmente no podría vivir sin un cursor.

- referencia a los puntos de referencia de TPC sugiriendo cursoresmay sea más competitivo de lo que la gente cree en general.
- referencia a optimizaciones de uso de memoria para cursores desde Sql-Server 2005

3) ¿Hay algún problema en el que pueda pensar que los cursores son más adecuados para resolver que las operaciones basadas en conjuntos?

EDITA: Operaciones basadas en conjuntos literalmenteno pued Execute procedimientos almacenados, etc. (consulte la edición para el elemento 1 anterior).
EDITA: Las operaciones basadas en conjuntos son exponencialmente más lentas que fila por fila cuando se trata de agregar sobre grandes conjuntos de datos.

Artículo de MSDN explicando su perspectiva delos más comune problemas para los que la gente recurre a los cursores (y alguna explicación de las técnicas basadas en conjuntos que funcionarían mejor).Microsoft dice (vagamente) en el 2008 Referencia de Transact SQL en MSDN: "... hay momentos en que los resultados se procesan mejor una fila a la vez", pero no dan ejemplos de a qué casos se refieren.

Principalmente, tengo la intención de convertir los cursores en operaciones basadas en conjuntos en mi código anterior si / mientras realizo actualizaciones significativas a varias aplicaciones, siempre que se pueda obtener algo de él. (Yo tiendo a la pereza sobre la pureza la mayor parte del tiempo, es decir, si no está roto, no lo arregles).

Respuestas a la pregunta(4)

Su respuesta a la pregunta