Clique no banner para conhecer e adquirir o meu treinamento de Bancos de Dados no Azure

SQL Server – Como executar em batch todos os scripts .sql de uma pasta ou diretório pelo SQLCMD

Visualizações: 22.861 views
Tempo de Leitura: 3 minutos

Olá pessoal,
Boa noite!

Neste post vou demonstrar 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 hoje mesmo precisei exportar algumas SP’s e funções de um banco para o outro, gerando 174 scripts SQL (sempre crio 1 por objeto). 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 o 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 básico

SQL Server - Batch processing executing SQL Scripts in a folder directory

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

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

SQL-Server-Batch-processing-executing-SQL-Scripts-in-a-folder-directory-SQLCMD_4

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 avançado:

Para quem gosta um pouco mais de organização nos logs de execução, vou disponibilizar também uma solução mais avançada um pouco, criando um log de execução bem bacana. Além disso, adicionei o parâmetro -e (se você não gostar, pode remover), que exibe além do resultado dos scripts executados, o conteúdo do próprio script, para evidenciar ainda mais a execução.

Exemplo do log de execução:
SQL Server - Batch processing executing SQL Scripts in a folder directory SQLCMD Advanced

Obrigado pela visita e até o próximo post!
Abraço.

sql server executar script em lote vários scripts arquivos de uma pasta sqlcmd batch execute processing

sql server executar script em lote vários scripts arquivos de uma pasta sqlcmd batch execute