quinta-feira, 23 de junho de 2016

Executar em batch todos os scripts de uma pasta SQLCMD - SQL SERVER

Neste post daremos continuidade as funcionalidades do SQLCMD e demonstraremos como executar vários scripts em lote que estão em uma determinada pasta, gerando log de execução, com apenas uma linha de código. Essa instrução é bem simples, e permite uma série de personalizações para atender à sua necessidade.

Acredito que todo DBA e boa parte dos desenvolvedores já precisaram executar vários scripts SQL de forma prática e rápida, não se esquecendo de nenhum e ainda logando as operações para eventuais questionamentos. Essa atividade é muito comum e diariamente precisamos executar uma serie de scripts em sequencia.
E é claro que eu não iria executá-los um por um manualmente..

Para essa solução, vou utilizar a linguagem do Prompt de comando do Windows (CMD.exe) e SQLCMD, o utilitário de linha de comando do SQL Server.

Lembre-se que como responsabilidade de todo DBA, você deve avaliar e validar todos os scripts que lhe são enviados para serem executados, preferencialmente em um ambiente de testes, desenvolvimento e/ou pré-produção. Não utilize a solução apresentada aqui para executar vários scripts em batch diretamente na produção sem ao menos tê-los testado em um ambiente de testes antes.

Exemplo:















Criaremos um arquivo .BAT no diretório dos seus scripts 
(Neste exemplo, vou usar o nome “Executa Scripts.bat”) com o seguinte comando:

2
for %%G in (*.sql) do sqlcmd /S localhost\sql2014 /d Testes -E -i"%%G" >> Teste.log
pause


Detalhes, onde:

/S: define o servidor\instância onde os scripts serão executados
/d: define o database onde os scripts serão executados
-E: especifica que o modo de autenticação será o Trusted Connection (Autenticação Windows AD). Caso você queira utilizar autenticação SQL, utilize -Uusuario e -Psenha

-i: especifica o arquivo de entrada que contém os comandos que serão executados







Reparem que nessa solução, o log é gerado com o resultado da execução de cada script, sem informação de data e hora e sem separação entre os scripts. Com isso, os resultados não ficam muito organizados dentro do arquivo. Se você não se preocupa muito com a saída do log, pode utilizar essa solução tranquilamente.


Exemplo do log de execução:

Nenhum comentário:

Postar um comentário