Partilhar via


cmdlet 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 que têm suporte do utilitário sqlcmd.

Usando Invoke-Sqlcmd

O cmdlet Invoke-Sqlcmd permite executar os 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 chamada do 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, com a especificação de um arquivo de entrada e a indicação do 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 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ída pelo caractere de escape "`" do 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 Windows PowerShell 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 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, suponha que o banco de dados padrão de sua conta do Windows na instância padrão do computador local seja o master. Então, os comandos a seguir retornariam master:

Set-Location SQLSERVER:\SQL
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"

Os comandos a seguir 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: :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftrace e :serverlist.

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 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 do 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

ID de logon para Autenticação do SQL Server.

-U

-Username

Senha para a autenticação do SQL Server.

-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

Nome de host.

-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

Referência

Utilitário sqlcmd

Conceitos

Usar cmdlets do Mecanismo de Banco de Dados

Usar o utilitário sqlcmd