O cmdlet Invoke-Sqlcmd executa um script que contém as linguagens e os comandos compatíveis com o utilitário SQLCMD do SQL Server.
Os comandos com suporte são instruções Transact-SQL e o subconjunto da sintaxe XQuery compatível com o mecanismo de banco de dados.
Esse cmdlet também aceita muitos dos comandos com suporte nativo pelo SQLCMD, como GO e QUIT.
Esse cmdlet também aceita as variáveis de script SQLCMD, como SQLCMDUSER.
Por padrão, esse cmdlet não define variáveis de script SQLCMD.
Esse cmdlet não dá suporte ao uso de comandos relacionados principalmente à edição interativa de script.
Os comandos que não têm suporte são: :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftrace e :serverlist.
Quando esse cmdlet é executado, o primeiro conjunto de resultados retornado pelo script é exibido como uma tabela formatada.
Se os conjuntos de resultados subsequentes contiverem listas de colunas diferentes da primeira, esses conjuntos de resultados não serão exibidos.
Se os conjuntos de resultados subsequentes após o primeiro conjunto tiverem a mesma lista de colunas, suas linhas serão acrescentadas à tabela formatada que contém as linhas retornadas pelo primeiro conjunto de resultados.
Você pode exibir SQL Server saída da mensagem, como aquelas resultantes da instrução SQL PRINT, especificando o parâmetro Verbose.
Exemplos
Exemplo 1: conectar-se a uma instância nomeada e executar um script
Esse comando se conecta a uma instância nomeada do Mecanismo de Banco de Dados SQL em um computador e executa um script Transact-SQL básico.
Exemplo 2: invocar comandos em um arquivo de script e salvar a saída em um arquivo de texto
PS C:\> Invoke-Sqlcmd -InputFile "C:\ScriptFolder\TestSqlCmd.sql" | Out-File -FilePath "C:\ScriptFolder\TestSqlCmd.rpt"
Output sent to TestSqlCmd.rpt.
Esse comando lê um arquivo que contém instruções Transact-SQL e comandos SQLCMD, executa o arquivo e grava a saída em outro arquivo.
O arquivo de saída pode conter informações proprietárias, portanto, você deve proteger os arquivos de saída com as permissões NTFS apropriadas.
Exemplo 3: invocar um script e passar valores variáveis de uma cadeia de caracteres
Esse comando usa uma matriz de cadeias de caracteres como entrada para o parâmetro Variable .
A matriz define várias variáveis SQLCMD.
Os sinais $ na instrução SELECT que identificam as variáveis SQLCMD são escapados usando o caractere de tique de fundo (').
Exemplo 4: Invocar um script e passar variáveis do mecanismo de banco de dados SQL
Esse comando usa Set-Location para navegar até o caminho do provedor de SQL Server Windows PowerShell para uma instância do Mecanismo de Banco de Dados SQL.
Em seguida, ele chama Get-Item para recuperar um objeto sql management object server para uso como o parâmetro ServerInstance de Invoke-Sqlcmd.
Exemplo 5: executar uma consulta e exibir a saída detalhada
Esse comando usa o parâmetro Windows PowerShell Verbose para retornar a saída da mensagem do comando SQL PRINT.
Exemplo 6: invocar um comando usando uma cadeia de caracteres posicional como entrada
PS C:\> Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"
WARNING: Using provider context. Server = MyComputer, Database = AdventureWorks2014.
DatabaseName
------------
AdventureWorks2014
Esse comando usa uma cadeia de caracteres posicional para fornecer a entrada para o parâmetro Query .
Ele também demonstra como Invoke-Sqlcmd usa o caminho atual para definir o contexto do banco de dados como AdventureWorks2014.