Esta pergunta antiga merece uma resposta mais abrangente. Alguns deles são mencionados em outras respostas / comentários aqui, outros podem ou não funcionar para a situação específica do OP, mas podem funcionar para outros que procuram chamar procs armazenados de forma assíncrona a partir do SQL.
Apenas para ser totalmente explícito: o TSQL não possui (por si só) a capacidade de iniciar outras operações do TSQL de forma assíncrona .
Isso não significa que você ainda não tem muitas opções:
- Tarefas do SQL Agent : Crie várias tarefas SQL e agende-as para serem executadas no momento desejado ou inicie-as de forma assíncrona a partir de um processo armazenado "controle mestre"
sp_start_job
. Se você precisar monitorar o progresso deles programaticamente, verifique se os trabalhos atualizam uma tabela JOB_PROGRESS personalizada (ou verifique se eles terminaram de usar a função não documentada, xp_sqlagent_enum_jobs
conforme descrito neste excelente artigo de Gregory A. Larsen). Você deve criar quantos trabalhos separados desejar para que processos paralelos sejam executados, mesmo se eles estiverem executando o mesmo processo armazenado com parâmetros diferentes.
- Pacote SSIS : para cenários assíncronos mais complicados, crie um pacote SSIS com um fluxo de tarefas de ramificação simples. O SSIS iniciará essas tarefas em spids individuais, que o SQL executará em paralelo. Chame o pacote SSIS de um trabalho do agente SQL.
- Aplicativo personalizado : escreva um aplicativo personalizado simples no idioma de sua escolha (C #, Powershell etc.), usando os métodos assíncronos fornecidos por esse idioma. Chame um proc armazenado SQL em cada encadeamento de aplicativo.
- Automação OLE : No SQL, use
sp_oacreate
e sp_oamethod
para iniciar um novo processo chamando um ao outro proc armazenado, conforme descrito neste artigo , também por Gregory A. Larsen.
- Service Broker : examine o uso do Service Broker , um bom exemplo de execução assíncrona neste artigo .
- Execução paralela do CLR : use os comandos CLR
Parallel_AddSql
e Parallel_Execute
conforme descrito neste artigo por Alan Kaplan (somente SQL2005 +).
- Tarefas agendadas do Windows : listadas quanto à integridade, mas não sou fã dessa opção.
Se fosse eu, provavelmente usaria vários trabalhos do SQL Agent em cenários mais simples e um pacote SSIS em cenários mais complexos.
No seu caso, chamar os trabalhos do SQL Agent parece uma opção simples e gerenciável.
Um comentário final : o SQL já tenta paralelizar operações individuais sempre que pode *. Isso significa que a execução de duas tarefas ao mesmo tempo, em vez de uma após a outra, não garante que elas terminem mais cedo. Teste com cuidado para ver se ele realmente melhora alguma coisa ou não.
Tivemos um desenvolvedor que criou um pacote DTS para executar 8 tarefas ao mesmo tempo. Infelizmente, era apenas um servidor com 4 CPUs :)
* Assumindo configurações padrão. Isso pode ser modificado alterando o Grau máximo de paralelismo ou Máscara de afinidade do servidor ou usando a dica de consulta MAXDOP.