Esta vieja pregunta merece una respuesta más completa. Algunos de estos se mencionan en otras respuestas / comentarios aquí, otros pueden o no funcionar para la situación específica de OP, pero pueden funcionar para otros que buscan llamar a los procedimientos almacenados asincrónicamente desde SQL.
Solo para ser totalmente explícito: TSQL no tiene (por sí mismo) la capacidad de lanzar otras operaciones TSQL de forma asincrónica .
Eso no significa que todavía no tenga muchas opciones:
- Trabajos del Agente SQL : cree múltiples trabajos SQL, y prográmelos para que se ejecuten en el momento deseado, o inícielos asíncronamente desde un proceso almacenado de "control maestro" utilizando
sp_start_job
. Si necesita monitorear su progreso programáticamente, solo asegúrese de que cada trabajo actualice una tabla JOB_PROGRESS personalizada (o puede verificar si han terminado de usar la función no documentada xp_sqlagent_enum_jobs
como se describe en este excelente artículo de Gregory A. Larsen). Debe crear tantos trabajos separados como desee que se ejecuten los procesos paralelos, incluso si están ejecutando el mismo proceso almacenado con diferentes parámetros.
- Paquete SSIS : para escenarios asincrónicos más complicados, cree un paquete SSIS con un flujo de tareas de ramificación simple. SSIS lanzará esas tareas en spids individuales, que SQL ejecutará en paralelo. Llame al paquete SSIS desde un trabajo de agente SQL.
- Aplicación personalizada : escriba una aplicación personalizada simple en el idioma que elija (C #, Powershell, etc.), utilizando los métodos asincrónicos proporcionados por ese idioma. Llame a un proceso almacenado de SQL en cada subproceso de aplicación.
- Automatización OLE : en SQL, use
sp_oacreate
y sp_oamethod
para iniciar un nuevo proceso que se llame entre sí a un proceso almacenado como se describe en este artículo , también por Gregory A. Larsen.
- Service Broker : considere el uso de Service Broker , un buen ejemplo de ejecución asincrónica en este artículo .
- Ejecución paralela de CLR : utilice los comandos CLR
Parallel_AddSql
y Parallel_Execute
como se describe en este artículo por Alan Kaplan (solo SQL2005 +).
- Tareas programadas de Windows : enumeradas para completar, pero no soy fanático de esta opción.
Si fuera yo, probablemente usaría múltiples trabajos de Agente SQL en escenarios más simples y un paquete SSIS en escenarios más complejos.
En su caso, llamar a trabajos de Agente SQL suena como una opción simple y manejable.
Un comentario final : SQL ya intenta paralelizar operaciones individuales siempre que puede *. Esto significa que ejecutar 2 tareas al mismo tiempo en lugar de una tras otra no garantiza que terminará antes. Pruebe cuidadosamente para ver si realmente mejora algo o no.
Tuvimos un desarrollador que creó un paquete DTS para ejecutar 8 tareas al mismo tiempo. Desafortunadamente, solo era un servidor de 4 CPU :)
* Asumiendo la configuración predeterminada. Esto se puede modificar alterando el Grado máximo de paralelismo o la Máscara de afinidad del servidor, o utilizando la sugerencia de consulta MAXDOP.