utilitário sqlcmd
Aplica-se a:Banco de Dados SQL do Azure
Azure
Instância Gerida SQL do Azure
Azure Synapse Analytics
Analytics Platform System (PDW)
Base de Dados SQL no Microsoft Fabric
O utilitário sqlcmd permite inserir instruções Transact-SQL, procedimentos do sistema e arquivos de script por meio de vários modos:
- No prompt de comandos.
- No Editor de Consultas em modo SQLCMD.
- Em um arquivo de script do Windows.
- Em uma etapa de trabalho do sistema operacional (
cmd.exe
) de um trabalho do SQL Server Agent.
Observação
Embora o Microsoft Entra ID seja o novo nome para o Azure Active Directory (Azure AD), para evitar a perturbação de ambientes existentes, o Azure AD ainda permanece em alguns elementos codificados, como campos da interface do utilizador, provedores de conexão, códigos de erro e cmdlets. Neste artigo, os dois nomes são intercambiáveis.
Descubra qual versão você instalou
Existem duas versões do sqlcmd:
O
go-mssqldb
baseado em sqlcmd, às vezes estilizado como go-sqlcmd. Esta versão é uma ferramenta autônoma que você pode baixar independentemente do SQL Server.O sqlcmd baseado em ODBC, disponível com o SQL Server ou os Utilitários de Linha de Comando da Microsoft, e parte do pacote
mssql-tools
no Linux.
Para determinar a versão instalada, execute a seguinte instrução na linha de comando:
sqlcmd "-?"
sqlcmd "-?"
sqlcmd -?
Se você estiver usando a nova versão do sqlcmd (Go), a saída será semelhante ao exemplo a seguir:
Version: 1.3.1
Verificar versão
Você pode usar sqlcmd --version
para determinar qual versão está instalada. Você deve ter pelo menos a versão 1.0.0 instalada.
Importante
A instalação do sqlcmd (Go) por meio de um gerenciador de pacotes substitui sqlcmd (ODBC) por sqlcmd (Go) no caminho do ambiente. Todas as sessões de linha de comando atuais devem ser fechadas e reabertas para que isso entre em vigor.
sqlcmd (ODBC) não será removido e ainda pode ser usado especificando o caminho completo para o executável. Você também pode atualizar sua variável PATH
para indicar qual tem precedência. Para fazer isso no Windows 11, abra Configurações do sistema e vá para Sobre > Configurações avançadas do sistema. Quando Propriedades do Sistema for aberto, selecione o botão Variáveis de Ambiente. Na metade inferior, em Variáveis do sistema, selecione Caminho e, em seguida, selecione Editar. Se o local sqlcmd (Go) for salvo em (C:\Program Files\sqlcmd
é padrão) e estiver listado antes de C:\Program Files\Microsoft SQL Server\<version>\Tools\Binn
, então sqlcmd (Go) será usado. Você pode inverter a ordem para tornar sqlcmd (ODBC) o padrão novamente.
Baixe e instale o sqlcmd
- sqlcmd (Go)
- sqlcmd (ODBC)
sqlcmd (Go) pode ser instalado em várias plataformas, no Microsoft Windows, macOS e Linux. As versões mais recentes que a 1.6 podem não estar disponíveis em todos os gerenciadores de pacotes. Ainda não há data prevista para a sua disponibilidade.
winget (CLI do Gerenciador de Pacotes do Windows)
Instale o Cliente do Gerenciador de Pacotes do Windows, se ainda não o tiver.
Execute o seguinte comando para instalar sqlcmd (Go).
winget install sqlcmd
Achocolatado
Instale Chocolatey se ainda não o tiver.
Execute o seguinte comando para instalar sqlcmd (Go).
choco install sqlcmd
Download direto
Baixe o ficheiro
-windows-amd64.zip
ou-windows-arm.zip
correspondente da última versão do mais recente do sqlcmd (Go), do repositório de código do GitHub.Extraia o arquivo
sqlcmd.exe
da pasta zip baixada.
Pré-instalado
Azure Cloud Shell
Pode experimentar o utilitário sqlcmd, identificado como e, do Azure Cloud Shell, pois vem pré-instalado por padrão.
Azure Data Studio
Para executar instruções SQLCMD no Azure Data Studio, selecione Habilitar SQLCMD na barra de ferramentas do editor.
SQL Server Management Studio (SSMS)
Para executar instruções SQLCMD no SQL Server Management Studio (SSMS), selecione Modo SQLCMD na lista suspensa do Menu de Consulta na barra de navegação superior.
O SSMS usa o Microsoft .NET Framework SqlClient
para execução no modo regular e SQLCMD no Editor de Consultas. Quando sqlcmd é executado a partir da linha de comando, sqlcmd usa o driver ODBC. Como diferentes opções padrão podem ser aplicadas, você pode ver um comportamento diferente ao executar a mesma consulta no SSMS no Modo SQLCMD e no utilitário sqlcmd.
Sintaxe
- sqlcmd (Go)
- sqlcmd (ODBC)
Usage:
sqlcmd [flags]
sqlcmd [command]
Examples:
# Install/Create, Query, Uninstall SQL Server
sqlcmd create mssql --accept-eula --using https://aka.ms/AdventureWorksLT.bak
sqlcmd open ads
sqlcmd query "SELECT @@version"
sqlcmd delete
# View configuration information and connection strings
sqlcmd config view
sqlcmd config cs
Available Commands:
completion Generate the autocompletion script for the specified shell
config Modify sqlconfig files using subcommands like "sqlcmd config use-context mssql"
create Install/Create SQL Server, Azure SQL, and Tools
delete Uninstall/Delete the current context
help Help about any command
open Open tools (e.g ADS) for current context
query Run a query against the current context
start Start current context
stop Stop current context
Flags:
-?, --? help for backwards compatibility flags (-S, -U, -E etc.)
-h, --help help for sqlcmd
--sqlconfig string configuration file (default "/Users/<currentUser>/.sqlcmd/sqlconfig")
--verbosity int log level, error=0, warn=1, info=2, debug=3, trace=4 (default 2)
--version print version of sqlcmd
Use "sqlcmd [command] --help" for more information about a command.
Para obter informações mais detalhadas sobre sintaxe e uso do sqlcmd, consulte de sintaxe sqlcmd ODBC .
Quebrando alterações do sqlcmd (ODBC)
Várias opções e comportamentos são alterados no utilitário sqlcmd (Go). Para obter a lista mais up-toatualizada de sinalizadores ausentes para compatibilidade com versões anteriores, visite a discussão no GitHub Priorizar a implementação de sinalizadores para compatibilidade com versões anteriores.
Em versões anteriores do sqlcmd (Go), a opção
-P
foi temporariamente removida e as senhas para a Autenticação do SQL Server só podiam ser fornecidas por meio destes mecanismos:- A variável de ambiente
SQLCMDPASSWORD
- O comando
:CONNECT
- Quando solicitado, o usuário pode digitar a senha para concluir uma conexão
- A variável de ambiente
-r
requer um argumento0
ou1
-R
interruptor é removido.O interruptor
-I
foi removido. Para desativar o comportamento do identificador entre aspas, adicioneSET QUOTED IDENTIFIER OFF
nos seus scripts.-N
agora usa um valor de cadeia de caracteres que pode ser um dostrue
,false
oudisable
para especificar a opção de criptografia. (default
é o mesmo que omitir o parâmetro)- Se
-N
e-C
não forem fornecidos, sqlcmd negociará a autenticação com o servidor sem validar o certificado do servidor. - Se
-N
for fornecido, mas-C
não, o sqlcmd exigirá a validação do certificado do servidor. Um valorfalse
para criptografia ainda pode levar à criptografia do pacote de login. - Se
-N
e-C
forem fornecidos, sqlcmd usará seus valores para negociação de criptografia. - Mais informações sobre a negociação de criptografia cliente/servidor podem ser encontradas em MS-TDS PRELOGIN.
- Se
-u
O arquivo de saída Unicode gerado tem a marca de ordem de bytes (BOM) UTF-16 Little-Endian gravada nele.Alguns comportamentos que foram mantidos para manter a compatibilidade com
OSQL
podem ser alterados, como o alinhamento de cabeçalhos de coluna para alguns tipos de dados.Todos os comandos devem caber em uma linha, mesmo
EXIT
. O modo interativo não verifica se há parênteses abertos ou aspas para comandos e não solicita linhas sucessivas. Esse comportamento é diferente da versão ODBC, que permite que a consulta executada porEXIT(query)
abranja várias linhas.
As conexões do utilitário sqlcmd (Go) são limitadas a conexões TCP. Os pipes nomeados não são suportados neste momento no driver go-mssqldb
.
Melhorias
:Connect
agora tem um parâmetro-G
opcional para selecionar um dos métodos de autenticação do Banco de Dados SQL do Azure -SqlAuthentication
,ActiveDirectoryDefault
,ActiveDirectoryIntegrated
,ActiveDirectoryServicePrincipal
,ActiveDirectoryManagedIdentity
,ActiveDirectoryPassword
. Para obter mais informações, consulte autenticação do Microsoft Entra. Se-G
não for fornecida, a segurança integrada ou a autenticação do SQL Server será usada, dependendo da presença de um parâmetro de nome de usuário-U
.O novo parâmetro de linha de comando
--driver-logging-level
permite que você veja traços do drivergo-mssqldb
. Use64
para ver todos os vestígios.sqlcmd agora pode imprimir resultados usando um formato vertical. Use a nova opção de linha de comando
-F vertical
para defini-la. A variável de scriptSQLCMDFORMAT
também a controla.
Opções de linha de comando
Opções relacionadas com o início de sessão
-Um
Entra no SQL Server com uma conexão de administrador (DAC) dedicada. Esse tipo de conexão é usado para solucionar problemas de um servidor. Esta ligação funciona apenas com computadores servidores que suportam DAC. Se o DAC não estiver disponível, sqlcmd gerará uma mensagem de erro e será encerrado. Para obter mais informações sobre o DAC, consulte conexão de diagnóstico para administradores de banco de dados. A opção -A
não é suportada com a opção -G
. Ao se conectar ao Banco de Dados SQL do Azure usando -A
, você deve ser um administrador no servidor SQL lógico. O DAC não está disponível para um administrador do Microsoft Entra.
-C
Essa opção é usada pelo cliente para configurá-la para confiar implicitamente no certificado do servidor sem validação. Esta opção é equivalente à opção ADO.NET TRUSTSERVERCERTIFICATE = true
.
Para o utilitário sqlcmd (Go), as seguintes condições também se aplicam:
- Se
-N
e-C
não forem fornecidos, sqlcmd negociará a autenticação com o servidor sem validar o certificado do servidor. - Se
-N
for fornecido, mas-C
não for, sqlcmd exigirá a validação do certificado do servidor. Um valorfalse
para criptografia ainda pode levar à criptografia do pacote de login. - Se
-N
e-C
forem fornecidos, sqlcmd usará seus valores para negociação de criptografia.
-d db_name
Emite uma instrução USE <db_name>
quando você inicia sqlcmd. Esta opção define o sqlcmd variável de script SQLCMDDBNAME
. Este parâmetro especifica o banco de dados inicial. O padrão é a propriedade default-database do seu login. Se o banco de dados não existir, uma mensagem de erro será gerada e sqlcmd será encerrado.
-D
Interpreta o nome do servidor fornecido ao -S
como um DSN em vez de um nome de host. Para obter mais informações, consulte suporte DSN em sqlcmd e bcp em Conexão com sqlcmd.
Observação
A opção -D
só está disponível em clientes Linux e macOS. Em clientes Windows, ele anteriormente se referia a uma opção agora obsoleta que foi removida e é ignorada.
-l login_timeout
Especifica o número de segundos antes de um login do sqlcmd no driver ODBC atingir o tempo limite quando se tenta conectar a um servidor. Esta opção define a variável de script sqlcmdSQLCMDLOGINTIMEOUT
. O tempo limite padrão para login em sqlcmd é de 8 segundos. Ao usar a opção -G
para se conectar ao Banco de Dados SQL do Azure ou ao Azure Synapse Analytics e autenticar usando a ID do Microsoft Entra, recomenda-se um valor de tempo limite de pelo menos 30 segundos. O tempo limite de login deve ser um número entre 0
e 65534
. Se o valor fornecido não for numérico ou não se enquadrar nesse intervalo, sqlcmd gerará uma mensagem de erro. Um valor de 0
especifica o tempo limite como infinito.
-E
Usa uma conexão confiável em vez de usar um nome de usuário e senha para entrar no SQL Server. Por padrão, sem -E
especificado, sqlcmd usa a opção de conexão confiável.
A opção -E
ignora possíveis configurações de variáveis de ambiente de nome de usuário e senha, como SQLCMDPASSWORD
. Se a opção -E
for usada junto com a opção -U
ou a opção -P
, uma mensagem de erro será gerada.
-g
Define a configuração Criptografia de Coluna para Enabled
. Para obter mais informações, consulte Always Encrypted. Apenas as chaves mestras armazenadas no Repositório de Certificados do Windows são suportadas. A opção -g
requer pelo menos sqlcmd versão 13.1. Para determinar sua versão, execute sqlcmd -?
.
-G
Essa opção é usada pelo cliente ao se conectar ao Banco de Dados SQL do Azure ou ao Azure Synapse Analytics para especificar que o usuário seja autenticado usando a autenticação do Microsoft Entra. Esta opção define a variável de script sqlcmdSQLCMDUSEAAD = true
. A opção -G
requer pelo menos sqlcmd versão 13.1. Para determinar sua versão, execute sqlcmd -?
. Para obter mais informações, consulte Conectando-se ao Banco de Dados SQL ou Azure Synapse Analytics usando a autenticação do Microsoft Entra. A opção -A
não é suportada com a opção -G
.
A opção -G
só se aplica ao Banco de Dados SQL do Azure e ao Azure Synapse Analytics.
A autenticação interativa do Microsoft Entra não é suportada atualmente no Linux ou macOS. A autenticação integrada do Microsoft Entra requer Microsoft ODBC Driver 17 para SQL Server versão 17.6.1 ou superior e um ambiente Kerberos configurado corretamente .
Para obter mais informações sobre a autenticação do Microsoft Entra, consulte a autenticação do Microsoft Entra no sqlcmd .
-H workstation_name
Um nome de estação de trabalho. Esta opção define a variável de script sqlcmdSQLCMDWORKSTATION
. O nome da estação de trabalho está listado na coluna hostname
da exibição de catálogo sys.sysprocesses
e pode ser retornado usando o procedimento armazenado sp_who
. Se essa opção não for especificada, o padrão será o nome do computador atual. Esse nome pode ser usado para identificar diferentes sessões de sqlcmd.
-j
Imprime mensagens de erro brutas na tela.
-K application_intent
Declara o tipo de carga de trabalho do aplicativo ao se conectar a um servidor. O único valor suportado atualmente é ReadOnly
. Se -K
não for especificado, o sqlcmd não oferece suporte à conectividade com uma réplica secundária em um grupo de disponibilidade. Para obter mais informações, consulte Active Secundários: Réplicas Secundárias Legíveis (Always On Availability Groups).
-M multisubnet_failover
Sempre especifique -M
ao conectar-se ao listener do grupo de disponibilidade de um grupo de disponibilidade do SQL Server ou de uma Instância de Cluster de Failover do SQL Server.
-M
fornece deteção e conexão mais rápidas com o servidor (atualmente) ativo. Se -M
não for especificado, -M
está desativado. Para obter mais informações sobre Ouvintes, Conectividade de Cliente, Failover de Aplicativos, Criação e Configuração de Grupos de Disponibilidade (SQL Server), Clustering de Failover e Grupos de Disponibilidade Always On (SQL Server)e Secundários Ativos: Réplicas Secundárias de Leitura (Grupos de Disponibilidade Always On).
-N
Esta opção é usada pelo cliente para solicitar uma conexão criptografada.
Para o utilitário sqlcmd (Go), -N
agora usa um valor de cadeia de caracteres que pode ser um dos true
, false
ou disable
para especificar a opção de criptografia. (default
é o mesmo que omitir o parâmetro):
- Se
-N
e-C
não forem fornecidos, sqlcmd negociará a autenticação com o servidor sem validar o certificado do servidor. - Se
-N
for fornecido, mas-C
não, sqlcmd exigirá a validação do certificado do servidor. Um valorfalse
para criptografia ainda pode levar à criptografia do pacote de login. - Se
-N
e-C
forem fornecidos, sqlcmd usará seus valores para negociação de criptografia.
-P senha
Uma senha especificada pelo usuário. As senhas diferenciam maiúsculas de minúsculas. Se a opção -U
for usada e a opção -P
não for usada, e a variável de ambiente SQLCMDPASSWORD
não tiver sido definida, sqlcmd solicitará uma senha ao usuário. Não recomendamos o uso de uma senha nula (em branco), mas você pode especificar a senha nula usando um par de aspas duplas contíguas para o valor do parâmetro (""
).
Importante
O uso do -P
deve ser considerado inseguro. Evite dar a senha na linha de comando. Como alternativa, use a variável de ambiente SQLCMDPASSWORD
ou insira interativamente a senha omitindo a opção -P
.
Recomendamos que utilize uma palavra-passe forte .
O prompt de senha é exibido imprimindo o prompt de senha no console, da seguinte maneira: Password:
A entrada do usuário está oculta. Isso significa que nada é exibido e o cursor permanece na posição.
A variável de ambiente SQLCMDPASSWORD
permite definir uma senha padrão para a sessão atual. Portanto, as senhas não precisam ser codificadas em arquivos em lote. O exemplo a seguir primeiro define a variável SQLCMDPASSWORD
no prompt de comando e, em seguida, acessa o utilitário sqlcmd.
No prompt de comando, digite:
SET SQLCMDPASSWORD=p@a$$w0rd
sqlcmd
SET SQLCMDPASSWORD=p@a$$w0rd
sqlcmd
SET SQLCMDPASSWORD=p@a$$w0rd
sqlcmd
Se a combinação de nome de usuário e senha estiver incorreta, uma mensagem de erro será gerada.
Observação
A variável de ambiente OSQLPASSWORD
foi mantida para compatibilidade com versões anteriores. A variável de ambiente SQLCMDPASSWORD
tem precedência sobre a variável de ambiente OSQLPASSWORD
. Isso significa que sqlcmd e osql podem ser usados um ao lado do outro sem interferência. Scripts antigos continuam a funcionar.
Se a opção -P
for usada com a opção -E
, uma mensagem de erro será gerada.
Se a opção -P
for seguida por mais de um argumento, uma mensagem de erro será gerada e o programa será encerrado.
Uma senha contendo caracteres especiais pode gerar uma mensagem de erro. Você deve escapar de caracteres especiais ao usar -P
ou usar a variável de ambiente SQLCMDPASSWORD
.
-S [protocolo:]servidor[\instance_name][,porta]
Especifica a instância do SQL Server à qual se conectar. Define a variável de script sqlcmd SQLCMDSERVER
.
Especifique server_name para se conectar à instância padrão do SQL Server nesse servidor. Especifique server_name[\instance_name] para se conectar a uma instância nomeada do SQL Server nesse computador servidor. Se nenhum computador servidor for especificado, sqlcmd se conectará à instância padrão do SQL Server no computador local. Essa opção é necessária quando você executa sqlcmd de um computador remoto na rede.
de protocolo pode ser tcp
(TCP/IP), lpc
(memória partilhada) ou np
(tubos nomeados).
Se você não especificar um server_name[\instance_name] ao iniciar sqlcmd , o SQL Server verificará e usará a variável de ambiente SQLCMDSERVER
.
Observação
A variável de ambiente OSQLSERVER
foi mantida para compatibilidade com versões anteriores. A variável de ambiente SQLCMDSERVER
tem precedência sobre a variável de ambiente OSQLSERVER
. Isso significa que sqlcmd e osql podem ser usados um ao lado do outro sem interferência. Scripts antigos continuam a funcionar.
-U identificação_de_login
O nome de login ou o nome de usuário do banco de dados contido. Para usuários de banco de dados contidos, você deve fornecer a opção de nome do banco de dados (-d
).
Observação
A variável de ambiente OSQLUSER
foi mantida para compatibilidade com versões anteriores. A variável de ambiente SQLCMDUSER
tem precedência sobre a variável de ambiente OSQLUSER
. Isso significa que sqlcmd e osql podem ser usados um ao lado do outro sem interferência. Scripts antigos continuam a funcionar.
Se você não especificar a opção -U
ou a opção -P
, sqlcmd tentará se conectar usando o modo de Autenticação do Windows. A autenticação é baseada na conta do Windows do usuário que está executando sqlcmd.
Se a opção -U
for usada com a opção -E
(descrita posteriormente neste artigo), uma mensagem de erro será gerada. Se a opção -U
for seguida por mais de um argumento, uma mensagem de erro será gerada e o programa será encerrado.
-z nova_senha
Altere a palavra-passe:
sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd
sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd
sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd
-Z nova_senha
Altere a senha e saia:
sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd
sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd
sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd
Opções de entrada/saída
-f página de código | i:página de código[,o:página de código] | o:página de código[,i:página de código]
Especifica as páginas de código de entrada e saída. O número da página de código é um valor numérico que especifica uma página de código do Windows instalada.
Regras de conversão de página de código:
Se nenhuma página de código for especificada, sqlcmd usará a página de código atual para arquivos de entrada e saída, a menos que o arquivo de entrada seja um arquivo Unicode, caso em que nenhuma conversão é necessária.
sqlcmd reconhece automaticamente os arquivos de entrada Unicode big-endian e little-endian. Se a opção
-u
for especificada, a saída será sempre no formato little-endian Unicode.Se nenhum arquivo de saída for especificado, a página de código de saída será a página de código do console. Essa abordagem permite que a saída seja exibida corretamente no console.
Vários arquivos de entrada são assumidos como sendo da mesma página de código. Os arquivos de entrada Unicode e não-Unicode podem ser misturados.
Digite chcp
no prompt de comando para verificar a página de código do cmd.exe
.
-i input_file[,input_file2...]
Identifica o arquivo que contém um lote de instruções Transact-SQL ou procedimentos armazenados. Vários arquivos podem ser especificados que são lidos e processados em ordem. Não use espaços entre nomes de arquivos.
sqlcmd verifica primeiro se todos os arquivos especificados existem. Se um ou mais arquivos não existirem, sqlcmd será encerrado. As opções -i
e -Q
/-q
excluem-se mutuamente.
Observação
Se você usar a opção -i
seguida por um ou mais parâmetros adicionais, deverá usar um espaço entre o parâmetro e o valor. Este é um problema conhecido no sqlcmd (Go).
Exemplos de caminho:
-i C:\<filename>
-i \\<Server>\<Share$>\<filename>
-i "C:\Some Folder\<file name>"
Os caminhos de arquivo que contêm espaços devem ser colocados entre aspas.
Esta opção pode ser usada mais de uma vez:
sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>
-o ficheiro_saida
Identifica o arquivo que recebe a saída de sqlcmd.
Se -u
for especificado, o output_file será armazenado no formato Unicode. Se o nome do arquivo não for válido, uma mensagem de erro será gerada e sqlcmd será encerrado.
sqlcmd não oferece suporte à gravação simultânea de vários processos de sqlcmd no mesmo arquivo. A saída do arquivo está corrompida ou incorreta. A opção -f
também é relevante para formatos de arquivo. Este ficheiro é criado se não existir. Um arquivo com o mesmo nome de uma sessão anterior sqlcmd é substituído. O arquivo especificado aqui não é o arquivo stdout
. Se um arquivo stdout
for especificado, esse arquivo não será usado.
Exemplos de caminho:
-o C:< filename>
-o \\<Server>\<Share$>\<filename>
-o "C:\Some Folder\<file name>"
Os caminhos de arquivo que contêm espaços devem ser colocados entre aspas.
-r[0 | 1]
Redireciona a saída da mensagem de erro para o ecrã (stderr
). Se você não especificar um parâmetro ou se especificar 0
, somente as mensagens de erro com um nível de gravidade igual ou superior a 11 serão redirecionadas. Se você especificar 1
, toda a saída de mensagem de erro, incluindo PRINT
, será redirecionada. Esta opção não terá efeito se utilizar -o
. Por padrão, as mensagens são enviadas para stdout
.
Observação
Para o utilitário sqlcmd (Go), -r
requer um argumento 0
ou 1
.
-R
Aplica-se a: ODBC somente sqlcmd.
Faz com que sqlcmd localize colunas numéricas, monetárias, de data e hora recuperadas do SQL Server com base na localidade do cliente. Por padrão, essas colunas são exibidas usando as configurações regionais do servidor.
-u
Especifica que output_file é armazenado no formato Unicode, independentemente do formato do input_file.
Observação
Para o utilitário sqlcmd (Go), o arquivo de saída Unicode gerado tem a marca de ordem de bytes (BOM) UTF-16 Little-Endian gravada nele.
Opções de execução de consulta
-e
Grava scripts de entrada no dispositivo de saída padrão (stdout
).
-Eu
Aplica-se a: somente ODBC sqlcmd.
Define a opção de conexão SET QUOTED_IDENTIFIER
como ON
. Por padrão, ele é definido como OFF
. Para obter mais informações, consulte SET QUOTED_IDENTIFIER (Transact-SQL).
Observação
Para desativar o comportamento do identificador entre aspas no utilitário sqlcmd (Go), adicione SET QUOTED IDENTIFIER OFF
nos seus scripts.
-q "consulta cmdline"
Executa uma consulta quando sqlcmd é iniciado, mas não encerra sqlcmd quando a consulta termina de ser executada. Múltiplas consultas delimitadas por ponto-e-vírgula podem ser executadas. Use aspas ao redor da consulta, conforme mostrado no exemplo a seguir.
No prompt de comando, digite:
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
Importante
Não use o terminador GO
na consulta.
Se -b
for especificado junto com esta opção, sqlcmd será encerrado em caso de erro.
-b
é descrito em outra parte deste artigo.
-Q "consulta de linha de comandos"
Executa uma consulta quando sqlcmd começa e depois sai imediatamente de sqlcmd. Consultas múltiplas delimitadas por ponto-e-vírgula podem ser executadas.
Use aspas ao redor da consulta, conforme mostrado no exemplo a seguir.
No prompt de comando, digite:
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
Importante
Não use o terminador GO
na consulta.
Se -b
for especificado junto com esta opção, sqlcmd encerra-se em caso de erro.
-b
é descrito em outra parte deste artigo.
-t query_timeout
Especifica o número de segundos antes que um comando (ou instrução Transact-SQL) atinja o tempo limite. Esta opção define o sqlcmd variável de script SQLCMDSTATTIMEOUT
. Se um valor de query_timeout não for especificado, o comando não expirará. O query_timeout deve ser um número entre 1
e 65534
. Se o valor fornecido não for numérico ou não se enquadrar nesse intervalo, sqlcmd gerará uma mensagem de erro.
Observação
O valor de tempo limite real pode variar do valor de query_timeout especificado em vários segundos.
-v var = valor [ var = valor... ]
Cria uma variável de script sqlcmd que pode ser usada num script sqlcmd. Coloque o valor entre aspas se o valor contiver espaços. Você pode especificar vários valores de <var>="<value>"
. Se houver erros em qualquer um dos valores especificados, sqlcmd gerará uma mensagem de erro e será encerrada.
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
-x
Faz com que sqlcmd ignorem variáveis de script. Esse parâmetro é útil quando um script contém muitas instruções INSERT
que podem conter cadeias de caracteres que têm o mesmo formato que variáveis regulares, como $(<variable_name>)
.
Opções de formato
-h cabeçalhos
Especifica o número de linhas a imprimir entre os cabeçalhos das colunas. O padrão é imprimir títulos uma vez para cada conjunto de resultados de consulta. Esta opção define o sqlcmd variável de script SQLCMDHEADERS
. Use -1
para especificar que os cabeçalhos não sejam impressos. Qualquer valor que não seja válido faz com que sqlcmd gere uma mensagem de erro e, em seguida, saia.
-k [1 | 2]
Remove todos os caracteres de controle, como tabulações e caracteres de nova linha, da saída. Este parâmetro preserva a formatação da coluna quando os dados são retornados.
-
-k
remove caracteres de controle. -
-k1
substitui cada caractere de controle por um espaço. -
-k2
substitui caracteres de controle consecutivos por um único espaço.
-s col_separator
Especifica o caractere separador de coluna. O padrão é um espaço em branco. Esta opção define o sqlcmd variável de script SQLCMDCOLSEP
. Para utilizar caracteres que tenham um significado especial para o sistema operativo, como o e comercial (&
) ou o ponto e vírgula (;
), coloque o caractere entre aspas ("
). O separador de coluna pode ser qualquer caractere de 8 bits.
-w largura_da_tela
Especifica a largura da tela para a saída. Esta opção define a variável de script sqlcmdSQLCMDCOLWIDTH
. A largura da coluna deve ser um número maior que 8
e menor que 65536
. Se a largura da coluna especificada não cair nesse intervalo, sqlcmd gerará uma mensagem de erro. A largura padrão é de 80 caracteres. Quando uma linha de saída excede a largura da coluna especificada, é deslocada para a linha seguinte.
-W
Esta opção remove espaços à direita de uma coluna. Use essa opção junto com a opção -s
ao preparar dados que serão exportados para outro aplicativo. Não pode ser usado com as opções -y
ou -Y
.
-y variable_length_type_display_width
Define o sqlcmd variável de script SQLCMDMAXVARTYPEWIDTH
. O padrão é 256
. Ele limita o número de caracteres que são retornados para os tipos de dados de comprimento variável grande:
- varchar(max)
- nvarchar(max)
- varbinary(max)
- xml
- tipos de dados definidos pelo usuário (UDTs)
- texto
- ntext
- imagem
As UDTs podem ser de comprimento fixo, dependendo da implementação. Se esse comprimento de um UDT de comprimento fixo for menor que display_width, o valor do UDT retornado não será afetado. No entanto, se o comprimento for maior que display_width, a saída será truncada.
Atenção
Use a opção -y 0
com extrema cautela, pois ela pode causar problemas significativos de desempenho no servidor e na rede, dependendo do tamanho dos dados retornados.
-Y largura_de_ecrã_do_tipo_de_comprimento_fixado
Define a variável de script sqlcmdSQLCMDMAXFIXEDTYPEWIDTH
. O padrão é 0
(ilimitado). Limita o número de caracteres retornados para os seguintes tipos de dados:
- char(n), onde 1 <= n<= 8000
- nchar(n), onde 1 <= n<= 4000
- varchar(n), onde 1 <= n<= 8000
- nvarchar(n), onde 1 <= n<= 4000
- varbinary(n), onde 1 <= n<= 4000
- sql_variant
Opções de relatório de erros
-b
Especifica que sqlcmd sai e retorna um valor DOS ERRORLEVEL
quando ocorre um erro. O valor que é retornado para a variável ERRORLEVEL
é 1
quando a mensagem de erro do SQL Server tem um nível de gravidade maior que 10; caso contrário, o valor retornado será 0
. Se a opção -V
tiver sido definida além -b
, sqlcmd não relatará um erro se o nível de gravidade for inferior aos valores definidos usando -V
. Os arquivos em lote do prompt de comando podem testar o valor de ERRORLEVEL
e manipular o erro adequadamente.
sqlcmd não relata erros para o nível de gravidade 10 (mensagens informativas).
Se o script sqlcmd contiver um comentário incorreto, erro de sintaxe ou estiver faltando uma variável de script, a ERRORLEVEL
retornada será 1
.
-m error_level
Controla quais mensagens de erro são enviadas para stdout
. As mensagens que têm um nível de severidade maior ou igual a esse nível são enviadas. Quando esse valor é definido como -1
, todas as mensagens, incluindo mensagens informativas, são enviadas. Não são permitidos espaços entre o -m
e o -1
. Por exemplo, -m-1
é válido e -m -1
não é.
Esta opção também define a variável de script sqlcmdSQLCMDERRORLEVEL
. Esta variável tem um valor padrão de 0
.
-V nível_de_severidade_do_erro
Controla o nível de gravidade usado para definir a variável ERRORLEVEL
. Mensagens de erro com níveis de gravidade maiores ou iguais a esse valor definido ERRORLEVEL
. Os valores inferiores a 0 são reportados como 0
. Arquivos em lote e CMD podem ser usados para testar o valor da variável ERRORLEVEL
.
Opções diversas
-um tamanho_do_pacote
Solicita um pacote de um tamanho diferente. Esta opção define o sqlcmd variável de script SQLCMDPACKETSIZE
.
packet_size deve ser um valor entre 512
e 32767
. O padrão é 4096
. Um tamanho de pacote maior pode melhorar o desempenho na execução de scripts que têm muitas instruções Transact-SQL entre comandos GO
. Você pode solicitar um tamanho de pacote maior. No entanto, se a solicitação for negada, sqlcmd usará o padrão do servidor para o tamanho do pacote.
-c batch_terminator
Especifica o terminador de lote. Por padrão, os comandos são encerrados e enviados para o SQL Server digitando a palavra GO
em uma linha por si só. Ao redefinir o terminador de lote, não utilize as palavras-chave reservadas Transact-SQL ou caracteres que tenham significado especial para o sistema operativo, mesmo que sejam precedidos por uma barra invertida.
-L[c]
Lista os computadores servidores configurados localmente e os nomes dos computadores servidores que estão transmitindo na rede. Este parâmetro não pode ser usado em combinação com outros parâmetros. O número máximo de computadores servidores que podem ser listados é 3000. Se a lista de servidores estiver truncada devido ao tamanho do buffer, uma mensagem de aviso será exibida.
Observação
Devido à natureza da transmissão em redes, sqlcmd podem não receber uma resposta oportuna de todos os servidores. Portanto, a lista de servidores retornados pode variar para cada invocação dessa opção.
Se o parâmetro opcional c
for especificado, a saída aparecerá sem a linha de cabeçalho Servers:
e cada linha do servidor será listada sem espaços à esquerda. Esta apresentação é denominada saída limpa. A saída limpa melhora o desempenho de processamento de linguagens de script.
-p[1]
Imprime estatísticas de desempenho para cada conjunto de resultados. A exibição a seguir é um exemplo do formato para estatísticas de desempenho:
Network packet size (bytes): n
x xact[s]:
Clock Time (ms.): total t1 avg t2 (t3 xacts per sec.)
Onde:
-
x
= Número de transações processadas pelo SQL Server. -
t1
= Tempo total para todas as transações. -
t2
= Tempo médio para uma única transação. -
t3
= Número médio de transações por segundo.
Todos os tempos são em milissegundos.
Se o parâmetro opcional 1
for especificado, o formato de saída das estatísticas estará no formato separado por dois pontos que pode ser importado facilmente para uma planilha ou processado por um script.
Se o parâmetro opcional for qualquer valor diferente de 1
, um erro será gerado e sqlcmd será encerrado.
-X[1]
Desabilita comandos que podem comprometer a segurança do sistema quando sqlcmd é executado a partir de um arquivo em lotes. Os comandos desativados ainda são reconhecidos; sqlcmd emite uma mensagem de aviso e continua. Se o parâmetro opcional 1
for especificado, sqlcmd gerará uma mensagem de erro e, em seguida, será encerrado. Os seguintes comandos são desativados quando a opção -X
é usada:
ED
-
!!
comando
Se a opção -X
for especificada, ela impedirá que variáveis de ambiente sejam passadas para sqlcmd. Ele também impede que o script de inicialização especificado usando a variável de script SQLCMDINI
seja executado. Para obter mais informações sobre sqlcmd variáveis de script, consulte sqlcmd - Uso com variáveis de script.
-?
Exibe a versão do sqlcmd e um resumo de sintaxe de opções de sqlcmd.
Observação
No macOS, execute o comando sqlcmd '-?'
(com aspas) em vez disso.
Comentários
As opções não precisam ser usadas na ordem mostrada na seção de sintaxe.
Observação
Se você usar a opção -i
seguida por um ou mais parâmetros adicionais, deverá usar um espaço entre o parâmetro e o valor. Este é um problema conhecido no sqlcmd (Go).
Quando vários resultados são retornados, sqlcmd imprime uma linha em branco entre cada conjunto de resultados em um lote. Além disso, a mensagem <x> rows affected
não aparece quando não se aplica à instrução executada.
Para usar sqlcmd interativamente, digite sqlcmd
no prompt de comando com uma ou mais das opções descritas anteriormente neste artigo. Para obter mais informações, consulte Usar o utilitário sqlcmd
Observação
As opções -l
, -Q
, -Z
ou -i
fazem com que o sqlcmd saia após a execução.
O comprimento total da linha de comando do sqlcmd no ambiente de comando (por exemplo, cmd.exe
ou bash
), incluindo todos os argumentos e variáveis expandidas, é determinado pelo sistema operacional subjacente.
Precedência variável (baixa a alta)
- Variáveis ambientais ao nível do sistema
- Variáveis ambientais ao nível do utilizador
- Shell de comando (
SET X=Y
) definido no prompt de comando antes de executar sqlcmd sqlcmd -v X=Y
:Setvar X Y
Observação
Para exibir as variáveis ambientais, no Painel de Controle , abra Sistema e selecione a guia Avançado.
Variáveis de script SQLCMD
Variável | Opção relacionada | R/W | Padrão |
---|---|---|---|
SQLCMDUSER | -U | R | "" |
SQLCMDPASSWORD | -P | -- | "" |
SQLCMDSERVER | -S | R | "DefaultLocalInstance" |
SQLCMDWORKSTATION | -H | R | "Nome do computador" |
SQLCMDDBNAME | -d | R | "" |
SQLCMDLOGINTIMEOUT | -l | R/W | "8" (segundos) |
SQLCMDSTATTIMEOUT | -t | R/W | "0" = esperar indefinidamente |
SQLCMDHEADERS | -h | R/W | "0" |
SQLCMDCOLSEP | -s | R/W | " " |
SQLCMDCOLWIDTH | -w | R/W | "0" |
SQLCMDPACKETSIZE | -a | R | "4096" |
SQLCMDERRORLEVEL | -m | R/W | 0 |
SQLCMDMAXVARTYPEWIDTH | -y | R/W | "256" |
SQLCMDMAXFIXEDTYPEWIDTH | -Y | R/W | "0" = ilimitado |
SQLCMDEDITOR | R/W | "edit.com" | |
SQLCMDINI | R | "" | |
SQLCMDUSEAAD | -G | R/W | "" |
SQLCMDUSER
, SQLCMDPASSWORD
e SQLCMDSERVER
são definidos quando :Connect
é usado.
R
indica que o valor só pode ser definido uma vez durante a inicialização do programa.
R/W
indica que o valor pode ser modificado usando o comando :setvar
e os comandos subsequentes são influenciados pelo novo valor.
Comandos sqlcmd
Além de Transact-SQL instruções dentro de sqlcmd, os seguintes comandos também estão disponíveis:
GO
[ contagem ]
:List
[:]RESET
:Error
[:]ED
:Out
[:]!!
:Perftrace
[:]QUIT
:Connect
[:]EXIT
:On Error
:r
:Help
:ServerList
:XML [ ON | OFF ]
:Setvar
:Listvar
Esteja ciente do seguinte ao usar comandos sqlcmd:
Todos os comandos sqlcmd, exceto
GO
, devem ser prefixados por dois pontos (:
).Importante
Para manter a compatibilidade retroativa com scripts osql existentes, alguns dos comandos são reconhecidos sem dois pontos, sinalizados pelo
:
.comandos sqlcmd são reconhecidos somente se aparecerem no início de uma linha.
Todos os comandos sqlcmd não diferenciam maiúsculas de minúsculas.
Cada comando deve estar em uma linha separada. Um comando não pode ser seguido por uma instrução Transact-SQL ou outro comando.
Os comandos são executados imediatamente. Eles não são colocados no buffer de execução como são instruções Transact-SQL.
Editando comandos
[:]DE
Inicia o editor de texto. Este editor pode ser usado para editar o lote de Transact-SQL atual ou o último lote executado. Para editar o último lote executado, o comando ED
deve ser digitado imediatamente após a conclusão da execução do último lote.
O editor de texto é definido pela variável de ambiente SQLCMDEDITOR
. O editor padrão é Edit
. Para alterar o editor, defina a variável de ambiente SQLCMDEDITOR
. Por exemplo, para definir o editor para o Bloco de Notas da Microsoft, no prompt de comando, digite:
SET SQLCMDEDITOR=notepad
[:]REINICIAR
Limpa a cache de declarações.
:Lista
Imprime o conteúdo do cache de instruções.
Variáveis
:Setvar <var> [ "valor" ]
Define sqlcmd variáveis de script. As variáveis de script têm o seguinte formato: $(VARNAME)
.
Os nomes das variáveis não têm em conta a diferença entre maiúsculas e minúsculas.
As variáveis de script podem ser definidas das seguintes maneiras:
Implicitamente usando uma opção de linha de comando. Por exemplo, a opção
-l
define a variávelSQLCMDLOGINTIMEOUT
sqlcmd.Explicitamente usando o comando
:Setvar
.Definindo uma variável de ambiente antes de executar sqlcmd.
Observação
A opção -X
impede que variáveis de ambiente sejam passadas para sqlcmd.
Se uma variável definida usando :Setvar
e uma variável de ambiente tiverem o mesmo nome, a variável definida usando :Setvar
terá precedência.
Os nomes das variáveis não devem conter caracteres de espaço em branco.
Os nomes de variáveis não podem ter a mesma forma que uma expressão variável, como $(var)
.
Se o valor da cadeia de caracteres da variável de script contiver espaços em branco, coloque o valor entre aspas. Se um valor para uma variável de script não for especificado, a variável de script será descartada.
:Listvar
Exibe uma lista das variáveis de script que estão definidas no momento.
Observação
Somente as variáveis de script definidas por sqlcmd e aquelas definidas usando o comando :Setvar
são exibidas.
Comandos de saída
:Erro <nome do arquivo> | STDERR | STDOUT
Redirecione toda a saída de erro para o arquivo especificado por nome de arquivo, para stderr
ou para stdout
. O comando :Error
pode aparecer várias vezes em um script. Por padrão, a saída de erro é enviada para stderr
.
nome do arquivo
Cria e abre um arquivo que recebe a saída. Se o arquivo já existir, ele será truncado para zero bytes. Se o ficheiro não estiver disponível devido a permissões ou outros motivos, a saída não é alterada e é enviada para o último destino especificado ou padrão.
STDERR
Alterna a saída de erro para o fluxo
stderr
. Se isso tiver sido redirecionado, o destino para o qual o fluxo foi redirecionado receberá a saída de erro.STDOUT
Alterna a saída de erro para o stream
stdout
. Se isso tiver sido redirecionado, o destino para o qual o fluxo foi redirecionado receberá a saída de erro.
:out <nome do arquivo> | STDERR | STDOUT
Cria e redireciona todos os resultados da consulta para o arquivo especificado por nome de arquivo, para stderr
ou para stdout
. Por padrão, a saída é enviada para stdout
. Se o arquivo já existir, ele será truncado para zero bytes. O comando :Out
pode aparecer várias vezes em um script.
:Perftrace <nome do arquivo> | STDERR | STDOUT
Cria e redireciona todas as informações de rastreamento de desempenho para o arquivo especificado por nome de arquivo, para stderr
ou para stdout
. Por padrão, a saída de rastreamento de desempenho é enviada para stdout
. Se o arquivo já existir, ele será truncado para zero bytes. O comando :Perftrace
pode aparecer várias vezes em um script.
Comandos de controle de execução
:On Error [ sair | ignorar ]
Define a ação a ser executada quando ocorre um erro durante a execução de script ou lote.
Quando a opção exit
é usada, sqlcmd sai com o valor de erro apropriado.
Quando a opção ignore
é usada, sqlcmd ignora o erro e continua executando o lote ou script. Por padrão, uma mensagem de erro é impressa.
[:]SAIR
Faz com que o sqlcmd saia.
[:]EXIT [ ( Declaração ) ]
Permite que você use o resultado de uma instrução SELECT
como o valor de retorno de sqlcmd. Se for numérica, a primeira coluna da última linha de resultados é convertida em um inteiro de 4 bytes (longo). MS-DOS, Linux e macOS passam o byte inferior para o nível de erro do processo pai ou do sistema operativo. Windows 2000 e versões posteriores passam o inteiro completo de 4 bytes. A sintaxe é :EXIT(query)
.
Por exemplo:
:EXIT(SELECT @@ROWCOUNT)
Você também pode incluir o parâmetro :EXIT
como parte de um arquivo em lotes. Por exemplo, no prompt de comando, digite:
sqlcmd -Q ":EXIT(SELECT COUNT(*) FROM '%1')"
O utilitário sqlcmd envia tudo entre parênteses (()
) para o servidor. Se um procedimento armazenado do sistema selecionar um conjunto e retornar um valor, somente a seleção será retornada. A instrução :EXIT()
sem nada entre parênteses executa todas as instruções anteriores no bloco e depois termina sem retornar um valor.
Quando uma consulta incorreta é especificada, sqlcmd é encerrado sem um valor de retorno.
Aqui está uma lista de formatos EXIT
:
:EXIT
Não executa o lote e, em seguida, fecha imediatamente e não retorna nenhum valor.
:EXIT( )
Executa o lote e, em seguida, fecha e não retorna nenhum valor.
:EXIT(query)
Executa o lote que inclui a consulta e, em seguida, fecha depois que ele retorna os resultados da consulta.
Se RAISERROR
for usado em um script de sqlcmd e se um estado de 127 for gerado, sqlcmd fecha e retorna o ID da mensagem para o cliente. Por exemplo:
RAISERROR(50001, 10, 127)
Este erro faz com que o script sqlcmd termine e retorne a mensagem ID 50001 para o cliente.
Os valores de retorno -1
para -99
são reservados pelo SQL Server e sqlcmd define os seguintes valores de retorno adicionais:
Valor de retorno | Descrição |
---|---|
-100 | Erro encontrado antes de selecionar o valor de retorno. |
-101 | Nenhuma linha encontrada ao selecionar o valor de retorno. |
-102 | Ocorreu um erro de conversão ao selecionar o valor de retorno. |
GO [contagem]
GO
sinaliza o fim de um lote e a execução de quaisquer instruções de Transact-SQL em cache. O lote é executado várias vezes como lotes separados. Não é possível declarar uma variável mais de uma vez em um único lote.
Comandos diversos
:r <nome do arquivo>
Analisa instruções Transact-SQL adicionais e comandos de sqlcmd do arquivo especificado por nome de arquivo no cache de instruções. nome do ficheiro é lido relativamente ao diretório de arranque no qual sqlcmd foi executado.
Se o arquivo contiver instruções Transact-SQL que não sejam seguidas por GO
, deverá inserir GO
na linha que segue :r
.
O ficheiro será lido e executado depois que um terminador de lote for encontrado. Você pode emitir vários comandos :r
. O arquivo pode incluir qualquer comando sqlcmd, incluindo o terminador em lote GO
.
Observação
A contagem de linhas exibida no modo interativo será aumentada em uma para cada comando :r
encontrado. O comando :r
aparece na saída do comando list.
:Lista de servidores
Lista os servidores configurados localmente e os nomes dos servidores que transmitem na rede.
:Ligar nome_servidor[\nome_instância] [-l tempo limite] [-U nome_utilizador [-P palavra-passe]]
Conecta-se a uma instância do SQL Server. Também fecha a conexão atual.
Opções de tempo limite:
Valor | Comportamento |
---|---|
0 |
Espere para sempre |
n>0 |
Aguarde e segundos |
A variável de script SQLCMDSERVER
reflete a conexão ativa atual.
Se de tempo limite não for especificado, o valor da variável SQLCMDLOGINTIMEOUT
é usado como padrão.
Se apenas user_name for especificado (como uma opção ou como uma variável de ambiente), o usuário será solicitado a inserir uma senha. Os usuários não são avisados se as variáveis de ambiente SQLCMDUSER
ou SQLCMDPASSWORD
foram definidas. Se você não fornecer opções ou variáveis de ambiente, o modo de Autenticação do Windows será usado para entrar. Por exemplo, para se conectar a uma instância, instance1
, do SQL Server, myserver
, usando a segurança integrada, você usaria o seguinte comando:
:connect myserver\instance1
Para se conectar à instância padrão do myserver
usando variáveis de script, você deve usar as seguintes configurações:
:setvar myusername test
:setvar myservername myserver
:connect $(myservername) $(myusername)
[:]!! comando
Executa comandos do sistema operacional. Para executar um comando do sistema operacional, inicie uma linha com dois pontos de exclamação (!!
) seguido pelo comando do sistema operacional. Por exemplo:
:!! dir
Observação
O comando é executado no computador no qual sqlcmd está sendo executado.
:XML [ ATIVADO | DESLIGADO ]
Para obter mais informações, consulte de formato de saída XML e de formato de saída JSON neste artigo.
:Ajuda
Lista os comandos sqlcmd , juntamente com uma breve descrição de cada comando.
Nomes de arquivo sqlcmd
arquivos de entrada do sqlcmd podem ser especificados com a opção -i
ou o comando :r
. Os arquivos de saída podem ser especificados com a opção -o
ou os comandos :Error
, :Out
e :Perftrace
. A seguir estão algumas diretrizes para trabalhar com esses arquivos:
:Error
,:Out
e:Perftrace
devem usar valores de de nome de arquivo separados. Se o mesmo nome de arquivo for usado, as entradas dos comandos podem ser misturadas.Se um arquivo de entrada localizado em um servidor remoto for chamado de sqlcmd em um computador local e o arquivo contiver um caminho de arquivo de unidade, como
:Out c:\OutputFile.txt
, o arquivo de saída será criado no computador local e não no servidor remoto.Os caminhos de arquivo válidos incluem:
C:\<filename>
,\\<Server>\<Share$>\<filename>
e"C:\Some Folder\<file name>"
. Se houver um espaço no caminho, use aspas.Cada nova sessão sqlcmd substitui arquivos existentes que têm os mesmos nomes.
Mensagens informativas
sqlcmd imprime qualquer mensagem informativa enviada pelo servidor. No exemplo a seguir, depois que as instruções Transact-SQL são executadas, uma mensagem informativa é impressa.
Inicie sqlcmd. Na linha de comandos do sqlcmd, digite a consulta:
USE AdventureWorks2022;
GO
Quando você pressiona ENTER, a seguinte mensagem informativa é impressa:
Changed database context to 'AdventureWorks2022'.
Formato de saída de consultas Transact-SQL
sqlcmd imprime primeiro um cabeçalho de coluna que contém os nomes de coluna especificados na lista de seleção. Os nomes das colunas são separados usando o caractere SQLCMDCOLSEP
. Por padrão, este é um espaço. Se o nome da coluna for menor que a largura da coluna, a saída será preenchida com espaços até à próxima coluna.
Esta linha é seguida por uma linha separadora que é uma série de caracteres de traço. A saída a seguir mostra um exemplo.
Inicie sqlcmd. Na linha de comando sqlcmd, digite a consulta:
USE AdventureWorks2022;
SELECT TOP (2) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
Quando você pressiona ENTER, o seguinte conjunto de resultados é retornado.
BusinessEntityID FirstName LastName
---------------- ------------ ----------
285 Syed Abbas
293 Catherine Abel
(2 row(s) affected)
Embora a coluna BusinessEntityID
tenha apenas quatro caracteres, ela foi expandida para acomodar o nome da coluna mais longa. Por padrão, a saída é encerrada em 80 caracteres. Essa largura pode ser alterada usando a opção -w
ou definindo a variável de script SQLCMDCOLWIDTH
.
Formato de saída XML
A saída XML que resulta de uma cláusula FOR XML
é emitida, sem formatação, num fluxo contínuo.
Quando você espera uma saída XML, use o seguinte comando: :XML ON
.
Observação
sqlcmd retorna mensagens de erro no formato usual. As mensagens de erro também são saídas no fluxo de texto XML em formato XML. Usando :XML ON
, sqlcmd não exibe mensagens informativas.
Para definir o modo XML como desativado, use o seguinte comando: :XML OFF
.
O comando GO
não deve aparecer antes que o comando :XML OFF
seja emitido, porque o comando :XML OFF
muda o sqlcmd de volta para saída em formato orientado a linhas.
Os dados XML (transmitidos) e os dados do conjunto de linhas não podem ser misturados. Se o comando :XML ON
não tiver sido emitido antes que uma instrução Transact-SQL que gera fluxos XML seja executada, a saída será distorcida. Depois que o comando :XML ON
tiver sido emitido, você não poderá executar instruções Transact-SQL que geram conjuntos de linhas regulares.
Observação
O comando :XML
não suporta a instrução SET STATISTICS XML
.
Formato de saída JSON
Quando você espera saída JSON, use o seguinte comando: :XML ON
. Caso contrário, a saída inclui o nome da coluna e o texto JSON. Esta saída não é JSON válida.
Para definir o modo XML como desativado, use o seguinte comando: :XML OFF
.
Para obter mais informações, consulte XML Output Format neste artigo.
Usar a autenticação do Microsoft Entra
Exemplos de utilização da autenticação Microsoft Entra:
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
Práticas recomendadas do sqlcmd
Use as seguintes práticas para ajudar a maximizar a segurança e a eficiência.
Utilize a segurança integrada.
Use
-X[1]
em ambientes automatizados.Proteja os arquivos de entrada e saída usando as permissões apropriadas do sistema de arquivos.
Para aumentar o desempenho, faça o máximo possível em uma sessão de sqlcmd, em vez de em várias sessões.
Defina valores de tempo limite para execução em lote ou consulta mais altos do que você espera que seja necessário para executar o lote ou consulta.
Use as seguintes práticas para ajudar a maximizar a correção:
Use
-V 16
para registrar quaisquer mensagens de nível de gravidade 16 . As mensagens de gravidade 16 indicam erros gerais que podem ser corrigidos pelo usuário.Verifique o código de saída e
DOS ERRORLEVEL
variável após o encerramento do processo. sqlcmd retorna0
normalmente, caso contrário, ele define oERRORLEVEL
conforme configurado por-V
. Em outras palavras, não se deve esperar que o valor deERRORLEVEL
seja o mesmo que o número de erro relatado pelo SQL Server. O número do erro é um valor específico do SQL Server correspondente à função do sistema @@ERROR.ERRORLEVEL
é um valor específico dosqlcmd para indicar por que sqlcmd encerrado e seu valor é influenciado pela especificação de-b
argumento de linha de comando.
O uso de -V 16
em combinação com a verificação do código de saída e DOS ERRORLEVEL
pode ajudar a detetar erros em ambientes automatizados, especialmente em controlos de qualidade antes de um lançamento de produção.
Conteúdo relacionado
- Saiba mais sobre o novo utilitário go-sqlcmd no GitHub
- Guia de início rápido: executar imagens de contêiner do SQL Server Linux com o Docker
- sqlcmd - Inicie o utilitário
- sqlcmd - Executar ficheiros de script Transact-SQL
- sqlcmd - use o utilitário
- sqlcmd - Use com variáveis de script
- sqlcmd - Conectar-se ao mecanismo de banco de dados
- Editar scripts SQLCMD com o Editor de Consultas
- Gerenciar etapas de trabalho
- Criar uma etapa de trabalho CmdExec