DevOps

Executando scripts T-SQL via Powershell

Em alguns processos de release, às vezes temos a necessidade de interagir com nosso servidor SQL Server para executar algumas consultas e até mesmo para a aplicação de alguns scripts SQL.

Uma maneira eficaz de se fazer isso é usando nosso “querido” Powershell. SmileEle sem dúvida é nosso salvador da pátria em muitos momentos… e neste caso não é diferente.

Agora a próxima pergunta a se responder é como fazer todo o processo via script? Pois bem … primeiro precisamos conhecer o Microsoft Command Line Utilities for SQL Server.  Para quem ainda não conhece a Microsoft desenvolveu um utilitário que permite os usuários se conectarem e enviarem lotes de comandos T-SQL para execução  tudo isso via command line. E é justamente com ele que vamos executar nossos processos via Powershell.

Com a ferramenta em mão temos que criar um script básico em Powershell que interaja com ela. Então mãos na massa:

Import-Module SQLPS

 

Primeiro precisamos importar o módulo SQLPS, este módulo carrega e registra snap-ins do SQL Server e assemblies de gerenciamento do mesmo. Este módulo nos habilita para:

  • Executar cmdlets do SQL Server;
  • Navegar na hierarquia de objetos do SQL Server;
  • Usar os modelos de objeto do SQL Server (como Microsoft.SqlServer.Management.Smo);

Como o módulo importado podemos criar uma lógica simples que leia os arquivos T-SQL e execute os mesmos via sqlcmd.

$pathSQLFiles = "\\Path\Powershell\"

$tsqlFiles = Get-ChildItem -Force $pathSQLFiles -Recurse

foreach($tsqlfile in $tsqlFiles)
{
     Invoke-Sqlcmd -ServerInstance "SERVIDOR\SQLEXPRESS" -Database "PowershellDemos" -InputFile $tsqlfile.FullName
}

Lembrando que este script em Powershell pode ser incluído em sua ferramenta de release como o Visual Studio Team Services ou Team Foudation Server, permitindo que você execute configurações específicas em seu banco de dados SQL Server durante o release de uma aplicação, por exemplo.

Quem quiser conferir o código completo pode acessar meu GitHub: sqlcmd.ps1

Até a próxima.

Não quer perder mas nenhuma informação sobre ALM e DevOps, então não esqueça de me acompanhar nas redes sociais

Deixe uma resposta