Compartilhar via


Invoke-Sqlcmd cmdlet

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

Usando Invoke-Sqlcmd

O cmdlet Invoke-Sqlcmd permite que você execute seus arquivos de script sqlcmd em um ambiente do Windows PowerShell. Muito do que você pode fazer com o sqlcmd também pode ser feito usando Invoke-Sqlcmd.

Este é um exemplo de chamada Invoke-Sqlcmd para executar uma consulta simples, semelhante à especificação do sqlcmd com as opções -Q e -S :

Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"  

Este é um exemplo de chamar Invoke-Sqlcmd, especificando um arquivo de entrada e canalizando a saída para um arquivo, isso é semelhante à especificação do 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 de como usar uma matriz do Windows PowerShell para passar várias variáveis de script sqlcmd para Invoke-Sqlcmd. Os caracteres "$" que identificam as variáveis de script sqlcmd na instrução SELECT foram escapados usando o caractere de escape "'":

$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 do SQL Server para Windows PowerShell para navegar até uma instância do Mecanismo de Banco de Dados e, em seguida, usar o cmdlet Get-Item do Windows PowerShell para recuperar o objeto do SMO Server 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 que é passada 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 trajetória no 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 está ativo quando o cmdlet é chamado.

Caminho Contexto do banco de dados
Começa com um disco diferente de SQLSERVER: O banco de dados padrão para a ID de logon na instância padrão no computador local.
SQLSERVER:\SQL O banco de dados padrão para a ID de logon na instância padrão no computador local.
SQLSERVER:\SQL\ComputerName O banco de dados padrão para a ID de logon na instância padrão no computador especificado.
SQLSERVER:\SQL\ComputerName\InstanceName O banco de dados padrão para a ID de logon na instância especificada no computador especificado.
SQLSERVER:\SQL\ComputerName\InstanceName\Databases O banco de dados padrão para a ID 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. Isso também se aplica a caminhos mais longos, como um caminho que especifica o nó Tabelas e Colunas em um banco de dados.

Por exemplo, suponha que o banco de dados padrão para sua conta do Windows na instância padrão do computador local seja o master. Então, os seguintes comandos retornariam master:

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 de banco de dados de trajetos. Você pode usar o parâmetro -SuppressProviderContextWarning para desativar a mensagem de aviso. Você pode usar o parâmetro -IgnoreProviderContext para informar Invoke-Sqlcmd sempre usar o banco de dados padrão para o logon.

Comparando Invoke-Sqlcmd e o Utilitário sqlcmd

Invoke-Sqlcmd pode ser usado para executar muitos dos scripts que podem ser executados usando o utilitário sqlcmd . No entanto, Invoke-Sqlcmd é executado em um ambiente do Windows PowerShell que é diferente do ambiente de prompt de comando em que o 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, :p erftrace e :serverlist.

Invoke-Sqlcmd não inicializa o ambiente sqlcmd ou variáveis de script, 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 Windows PowerShell -Verbose . 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 toda a saída de cmdlets, portanto, os parâmetros sqlcmd que especificam opções de formatação não são implementados 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 -Base de dados
Execute a consulta especificada e saia. -Q -Consulta
ID de logon da Autenticação do SQL Server. -U -Nome de usuário
Senha de Autenticação do SQL Server. -P -Senha
Definição de variável. -v -Variável
Intervalo de tempo limite de consulta. -T -QueryTimeout (Tempo de Espera da Consulta)
Parar a execução devido a um erro -b -AbortOnError
Conexão dedicada de administrador. -Um -DedicatedAdministratorConnection
Desabilite comandos interativos, script de inicialização e variáveis de ambiente. -X DesabilitarComandos
Desabilitar substituição de variável. -X -DesativarVariáveis
Nível mínimo de severidade a ser relatado. -V -SeverityLevel
Nível mínimo de erro a ser relatado. -m -ErrorLevel
Intervalo de tempo limite de logon. -l -ConnectionTimeout
Nome do host. -H -HostName
Alterar senha e sair. -Z -NewPassword
Arquivo de entrada que contém uma consulta -eu -ArquivoDeEntrada
Comprimento máximo da saída de caracteres. -w -MaxCharLength
Comprimento máximo da saída binária. -w -MaxBinaryLength
Conecte-se usando criptografia SSL. Nenhum parâmetro -EncryptConnection
Exibir erros Nenhum parâmetro -OutputSqlErrors
Enviar mensagens de saída para stderr. -r Nenhum parâmetro
Usar as configurações regionais do cliente -R Nenhum parâmetro
Execute a consulta especificada e permaneça em execução. -q Nenhum parâmetro
Página de código a ser usada para dados de saída. -f Nenhum parâmetro
Alterar uma senha e continuar funcionando -Z Nenhum parâmetro
Tamanho do pacote -a Nenhum parâmetro
Separador de coluna -s Nenhum parâmetro
Controlar cabeçalhos de saída -h Nenhum parâmetro
Especificar caracteres de controle -k Nenhum parâmetro
Largura fixa de exibição -Y Nenhum parâmetro
Largura de exibição com comprimento variável -y Nenhum parâmetro
Entrada de eco -E Nenhum parâmetro
Habilitar identificadores entre aspas -Eu Nenhum parâmetro
Remover espaços à direita -w Nenhum parâmetro
Listar instâncias -L Nenhum parâmetro
Formatar saída como Unicode -U Nenhum parâmetro
Imprimir estatísticas -p Nenhum parâmetro
Fim do comando -c Nenhum parâmetro
Conectar-se usando a Autenticação do Windows -E Nenhum parâmetro

Consulte Também

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