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

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

SQL, sql server, sql server 2008, sql server 2008 R2, Oracle, Oracle Database, Oracle 11g, Oracle 10g, Oracle 12c, MySQL, Firebird, Consultoria, Consultor, Programador, Programação. Desenvolvedor, Analista de Sistemas, DBA, Criação de website, Criação de Sistema Web, Vitória, Vila Velha, Guarapari, Espírito Santo, ES, Consultoria SQL em VItória, Treinamento, Curso, Prestação de serviço, prestar serviço, freelancer, freela, banco de dados, consultoria em banco de dados, consultor de banco de dados

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

    1. Cassia,
      Bom dia e obrigado pela visita.

      Como se trata de um script do DOS, o que se pode fazer para definir a ordem de execução é usar a ordenação pelo nome do arquivo ou pela data de criação/modificação. No caso deste exemplo, os scripts serão executados ordenando pelo nome do arquivo. Geralmente quando eu tenho uma ordem pré definida de execução, eu enumero os arquivos. Se for só alguns scripts, você pode colocar algum caractere na frente do nome para garantir que eles sejam ordenados primeiro.

      Ordenar pela data é possível, mas não acho que seja uma boa estratégia. De qualquer forma, vou postar como fazer isso.

  1. Bom dia!!

    Agora vou parar de ficar executar script por script quando tenho que atualizar a estrutura de uma base de dados. 😀

    Obrigado pela solução.

Deixe uma resposta