Partilhar via


cmdlet Invoke-Sqlcmd

Invoke-Sqlcmd é um cmdlet SQL Server que executa scripts que contêm instruções das linguagens (Transact-SQL e XQuery) e comandos compatíveis com o utilitário sqlcmd.

Usando Invoke-Sqlcmd

O cmdlet Invoke-Sqlcmd permite executar arquivos de script sqlcmd em um ambiente do Windows PowerShell. Quase tudo o que pode ser feito com sqlcmd também pode ser feito com Invoke-Sqlcmd.

Este é um exemplo de uma chamada a 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 de Invoke-Sqlcmd, com a especificação de um arquivo de entrada e o envio da saída para 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 transmitir diversas variáveis de script sqlcmd para Invoke-Sqlcmd. O caractere "$" que identifica as variáveis de script sqlcmd na instrução SELECT foi substituído pelo caractere de escape "`" de continuação de linha do PowerShell:

$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"  
Invoke-Sqlcmd -Query "SELECT `$(MyVar1) AS Var1, `$(MyVar2) AS Var2;" -Variable $MyArray  

Este é um exemplo de como usar o provedor de SQL Server para Windows PowerShell navegar até uma instância do Mecanismo de Banco de Dados e, em seguida, usar o cmdlet get-item Windows PowerShell para recuperar o objeto do servidor SMO para a instância e passá-lo para 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 precisa ser nomeado. Se a primeira cadeia de caracteres transmitida para Invoke-Sqlcmd: não for nomeada, ela será 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 seguintes comandos retornariam AdventureWorks2012:

Set-Location SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks2012\Tables\Person.Person  
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 pedir que Invoke-Sqlcmd use sempre o banco de dados padrão para logon.

Comparando o Invoke-Sqlcmd e o utilitário sqlcmd

Invoke-Sqlcmd pode ser usado para executar muitos dos scripts que podem ser executados com o utilitário sqlcmd . Porém, Invoke-Sqlcmd executa em um ambiente do Windows PowerShell que é diferente do ambiente de prompt de comando em que sqlcmd é executado. O comportamento de Invoke-Sqlcmd foi modificado para funcionar em um ambiente do Windows PowerShell.

Nem todos os comandos sqlcmd são implementados no Invoke-Sqlcmd. Os comandos que não são implementados incluem o seguinte: :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftracee :serverlist.

Invoke-Sqlcmd não inicializa o ambiente sqlcmd ou variáveis de scripts como SQLCMDDBNAME ou SQLCMDWORKSTATION.

Invoke-Sqlcmd não exibe mensagens, como a saída de 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 sqlcmd são necessários em um ambiente do 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 sqlcmd não sejam implementadas no Invoke-Sqlcmd. A tabela a seguir mostra a relação entre os parâmetros Invoke-Sqlcmd e as opções do sqlcmd :

Descrição Opção sqlcmd Parâmetro Invoke-Sqlcmd
Nome do servidor e da instância. -S -ServerInstance
O banco de dados inicial a ser usado. -d -Database
Executar a consulta especificada e sair. -Q -Query
SQL Server ID de logon de autenticação. -U -Username
SQL Server Senha de autenticação. -P -Password
Definição de variável. -v -Variable
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 -HostName
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 com 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
Conectar usando a Autenticação do Windows -E Sem parâmetros

Consulte Também

Usar cmdlets do Mecanismo de Banco de Dados
Utilitário sqlcmd
Usar o utilitário sqlcmd