Pergunta

Eu quero fazer algo como:

exec sproc1 and sproc2 at the same time
when they are both finished exec sproc3

Eu posso fazer isso em dts. Existe uma maneira de fazê-lo em Transact SQL? Ou há uma maneira de fazê-lo com um script em lotes (por exemplo VBS ou powershell)?

Foi útil?

Solução

sp _ _ começar trabalho

Eu estou fazendo uma coisa semelhante no momento, ea única maneira que eu encontrei para evitar o uso de SSIS ou algum shell externo é dividir a minha rotina de carga em 'tópicos' manualmente, e em seguida, disparar um único trabalho mestre sqlagent que por sua vez executa como muitos sp _ _ começar de trabalho como eu tenho threads. A partir desse ponto, todos eles funcionar de forma autónoma.

Não é exatamente o que estamos procurando, mas o resultado é o mesmo. Se você testar o status do trabalho para os sub postos de trabalho, você pode implementar seu início condicional de sproc 3 também.

O que é o ponto em 8 núcleos, se não podemos usá-los todos de uma vez?

Outras dicas

Você pode criar um CLR procedimento armazenado que (usando C #) chamaria os dois primeiros em seus próprios tópicos, e depois bloquear até que ambos estão completos ... em seguida, executar o terceiro.

Você é capaz de usar sprocs CLR em sua situação? Se assim for, eu vou editar esta resposta para ter mais detalhes.

Você precisa absolutamente ambos os SPs a ser executado em paralelo?

Com declarações CRUD simples dentro de um único SP, eu encontrei SQL S. faz um trabalho muito bom de determinar qual deles pode ser executado em paralelo e fazê-lo. Eu nunca vi SQL S. run 2 SPs em paralelo, se ambos são chamados sequencialmente a partir de uma declaração T-SQL, nem sei se é mesmo possível.

Agora, então, que as DTS realmente executá-los em paralelo? Poderia ser simplesmente executa-los sequencialmente, em seguida, chama o 3º SP após os últimos acabamentos com sucesso.

Se ele realmente executa-los em paralelo, provavelmente você deve ficar com DTS, mas então eu gostaria de saber o que ele faz se eu tiver uma chamada pacote DTS, digamos, 10 SPs pesados ??em paralelo ... eu puder tem que fazer alguns testes para saber que me: D

Você pode usar o SSIS. Os benefícios são que o pacote pode ser armazenado no SQL Server e facilmente programado lá.

De PowerShell ou praticamente qualquer linguagem de script externo, você pode usar a linha osql comando SQL ou sqlcmd. Esta técnica também pode ser utilizada para agendá-lo no SQL Server por descascar para fora usando xp_cmdshell também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top