Usando o cmdlet do Invoke-Sqlcmd
O Invoke-Sqlcmd é um cmdlet do SQL Server que executa scripts que contêm instruções de linguagens (Transact-SQL e XQuery) e comandos suportados pelo utilitário sqlcmd.
Usando o Invoke-Sqlcmd
O cmdlet do Invoke-Sqlcmd permite executar os arquivos de script sqlcmd em um ambiente do Windows PowerShell. Quase tudo o que pode ser feito com o sqlcmd também pode ser feito usando o Invoke-Sqlcmd.
Este é um exemplo de chamada de Invoke-Sqlcmd para executar uma consulta simples, semelhante à especificação de sqlcmd com as opções -Q e -S:
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"
Este é um exemplo de chamada do Invoke-Sqlcmd, especificando um arquivo de entrada e indicando o resultado em um arquivo. Esse processo é semelhante à especificação de sqlcmd com as opções -i e -o:
Invoke-Sqlcmd -InputFile "C:\MyFolder\TestSQLCmd.sql" | Out-File -filePath "C:\MyFolder\TestSQLCmd.rpt"
Este é um exemplo do uso de uma matriz do Windows PowerShell para passar diversas variáveis de script do sqlcmd para o Invoke-Sqlcmd. O caractere "$" que identifica as variáveis de script do sqlcmd na instrução SELECT foi substituído pelo caractere de escape "`" do Windows PowerShell:
$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"
Invoke-Sqlcmd -Query "SELECT `$(MyVar1) AS Var1, `$(MyVar2) AS Var2;" -Variable $MyArray
Este é um exemplo do uso do provedor do SQL Server para navegar por uma instância do Mecanismo de Banco de Dados e, em seguida, usar o cmdlet Get-Item do Windows PowerShell para recuperar o objeto Servidor SMO da instância e passá-lo para o Invoke-Sqlcmd:
Set-Location SQLSERVER:\SQL\MyComputer\MyInstance
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance (Get-Item .)
O parâmetro -Query é posicional e não tem que ser nomeado. Se a primeira cadeia de caracteres que é transmitida a Invoke-Sqlcmd: não é nomeada, ela é tratada como o parâmetro - Query.
Invoke-Sqlcmd "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"
Contexto de caminho em Invoke-Sqlcmd
Se você não usar o parâmetro -Database, o contexto do banco de dados para Invoke-Sqlcmd será definido pelo caminho que estiver ativo quando o cmdlet for chamado.
Caminho |
Contexto do Banco de Dados |
---|---|
Inicia com uma unidade diferente de SQLSERVER: |
O banco de dados padrão para a identificação de logon na instância padrão no computador local. |
SQLSERVER:\SQL |
O banco de dados padrão para a identificação de logon na instância padrão no computador local. |
SQLSERVER:\SQL\ComputerName |
O banco de dados padrão para a identificação de logon na instância padrão no computador especificado. |
SQLSERVER:\SQL\ComputerName\InstanceName |
O banco de dados padrão para a identificação de logon na instância especificada no computador especificado. |
SQLSERVER:\SQL\ComputerName\InstanceName\Databases |
O banco de dados padrão para a identificação de logon na instância especificada no computador especificado. |
SQLSERVER:\SQL\ComputerName\InstanceName\Databases\DatabaseName |
O banco de dados especificado na instância especificada no computador especificado. Isto também se aplica a caminhos mais longos, como um caminho que especifica os nós Tabelas e Colunas dentro de um banco de dados. |
Por exemplo, assuma que o banco de dados padrão para sua conta de Windows na instância padrão do computador local é mestre. Então, os seguintes comandos retornariam mestre:
Set-Location SQLSERVER:\SQL
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"
Os comandos a seguir retornariam AdventureWorks:
Set-Location SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks\Tables\Person.Contact
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"
Invoke-Sqlcmd fornece um aviso quando usa o contexto do banco de dados de caminho. Você pode usar o parâmetro -SuppressProviderContextWarning para desativar a mensagem de aviso. Você pode usar o parâmetro -IgnoreProviderContext para informar a Invoke-Sqlcmd para usar sempre o banco de dados padrão para logon.
Comparando o Invoke-Sqlcmd e o utilitário sqlcmd
O Invoke-Sqlcmd pode ser usado para executar muitos dos scripts que podem ser executados usando o utilitário sqlcmd. Entretanto, Invoke-Sqlcmd é executado em um ambiente Windows PowerShell que é diferente do ambiente de prompt de comando no qual o sqlcmd é executado. O comportamento de Invoke-Sqlcmd foi modificado para funcionar em um ambiente PowerShell.
Nem todos os comandos do sqlcmd são implementados no Invoke-Sqlcmd. Dentre os comandos que não são implementados estão: :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftrace e :serverlist.
O Invoke-Sqlcmd não inicializa o ambiente sqlcmd ou as variáveis de scripts, como SQLCMDDBNAME ou SQLCMDWORKSTATION.
Invoke-Sqlcmd não exibe mensagens, como o resultado das instruções PRINT, a menos que você especifique o parâmetro comum -Verbose do Windows PowerShell. Por exemplo:
Invoke-Sqlcmd -Query "PRINT N'abc';" -Verbose
Nem todos os parâmetros do sqlcmd são necessários em um ambiente Windows PowerShell. Por exemplo, o Windows PowerShell formata todas as saídas dos cmdlets, de modo que as opções de formatação de especificação de parâmetros do sqlcmd não sejam implementadas no Invoke-Sqlcmd. A tabela a seguir mostra a relação entre os parâmetros de Invoke-Sqlcmd e as opções de sqlcmd:
Descrição |
Opção sqlcmd |
Parâmetro Invoke-Sqlcmd |
---|---|---|
Nome de servidor e instância. |
-S |
-ServerInstance |
O banco de dados inicial a ser usado. |
-d |
-Banco de Dados |
Executar a consulta especificada e sair. |
-Q |
-Consulta |
ID de logon para Autenticação do SQL Server. |
-U |
-Nome de usuário |
Senha para a Autenticação do SQL Server. |
-P |
-Senha |
Definição variável. |
-v |
-Variável |
Intervalo de tempo limite da consulta. |
-t |
-QueryTimeout |
Interromper a execução em um erro |
-b |
-AbortOnError |
Conexão de Administrador Dedicada. |
-A |
-DedicatedAdministratorConnection |
Desabilitar comandos interativos, script de inicialização e variáveis de ambiente. |
-X |
-DisableCommands |
Desabilitar substituição de variável. |
-x |
-DisableVariables |
Nível de severidade mínimo a ser informado. |
-V |
-SeverityLevel |
Nível de erro mínimo a ser informado. |
-m |
-ErrorLevel |
Intervalo de tempo limite de logon. |
-l |
-ConnectionTimeout |
Hostname. |
-H |
-HbostName |
Alterar senha e sair. |
-Z |
-NewPassword |
Arquivo de entrada que contém uma consulta |
-i |
-InputFile |
Comprimento máximo de saída de caracteres. |
-w |
-MaxCharLength |
Comprimento máximo de saída binária. |
-w |
-MaxBinaryLength |
Estabelecer conexão usando criptografia SSL |
Sem parâmetros |
-EncryptConnection |
Exibir erros |
Sem parâmetros |
-OutputSqlErrors |
Produzir mensagens para stderr. |
-r |
Sem parâmetros |
Usar configurações regionais do cliente |
-R |
Sem parâmetros |
Executar a consulta especificada e continuar executando. |
-q |
Sem parâmetros |
Página de código a ser usada para obter dados de saída. |
-f |
Sem parâmetros |
Alterar uma senha e continuar executando. |
-z |
Sem parâmetros |
Tamanho do pacote |
-a |
Sem parâmetros |
Separador de coluna |
-s |
Sem parâmetros |
Cabeçalhos de saída de controle |
-h |
Sem parâmetros |
Especificar caracteres de controle |
-k |
Sem parâmetros |
Largura da exibição de comprimento fixo |
-Y |
Sem parâmetros |
Largura da exibição de comprimento variável |
-y |
Sem parâmetros |
Entrada de eco |
-e |
Sem parâmetros |
Habilitar identificadores entres aspas |
-I |
Sem parâmetros |
Remover espaços à direita |
-W |
Sem parâmetros |
Listar instâncias |
-L |
Sem parâmetros |
Formatar saída como Unicode |
-u |
Sem parâmetros |
Imprimir estatísticas |
-p |
Sem parâmetros |
Término de comando |
-c |
Sem parâmetros |
Estabelecer conexão usando a Autenticação do Windows |
-E |
Sem parâmetros |
Consulte também