Compartilhar via


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 com suporte no 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 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, 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í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 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 é 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. Os seguintes comandos retornariam master:

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

Os comandos a seguir retornariam AdventureWorks2008R2:

Set-Location SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks2008R2\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

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 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 do Invoke-Sqlcmd e as opções do 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

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

-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