Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Base de dados SQL no Microsoft Fabric
Use o utilitário sqlcmd para introduzir instruções Transact-SQL, procedimentos do sistema e ficheiros de script através de vários modos:
- No prompt de comandos.
- No Editor de Consultas em modo SQLCMD.
- Em um arquivo de script do Windows.
- Numa etapa de trabalho de sistema operacional (
cmd.exe) de uma tarefa do SQL Server Agent.
Note
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.
Variantes do sqlcmd
Existem duas variantes do sqlcmd :
sqlcmd (Go): O
go-mssqldbbaseado em , por vezes estilizado como go-sqlcmd. Esta versão é uma ferramenta autônoma que você pode baixar independentemente do SQL Server. Ele roda em Windows, macOS, Linux e em contêineres.sqlcmd (ODBC): O sqlcmd alinhado à plataforma, baseado em ODBC, disponível com o SQL Server ou os utilitários de linha de comando da Microsoft e parte do
mssql-toolspacote no Linux. Ele também roda em Windows, macOS, Linux e em contêineres.
Para descobrir qual variante e versão do sqlcmd está instalada no seu sistema, consulte Verificar a versão instalada do utilitário sqlcmd.
Para obter informações sobre como obter o sqlcmd, consulte Baixar e instalar o utilitário sqlcmd.
Suporte a TDS 8.0
O SQL Server 2025 (17.x) introduz suporte TDS 8.0 para a utilidade sqlcmd .
Syntax
Neste artigo, os termos opção, parâmetro, argumento de linha de comandos e switch são intercambiáveis.
o sqlcmd (Go) tem dois modos de ajuda: --help para subcomandos modernos e -? para flags compatíveis com ODBC.
Comandos modernos (--ajuda)
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.
Flags compatíveis com ODBC (-?)
sqlcmd
-a packet_size
-A (dedicated administrator connection)
-b (terminate batch job if there is an error)
-c batch_terminator
-C (trust the server certificate)
-d db_name
-e (echo input)
-E (use trusted connection)
-F hostname_in_certificate
-g (enable column encryption)
-G (use Azure Active Directory for authentication)
-h rows_per_header
-H workstation_name
-i input_file
-I (enable quoted identifiers, always on)
-k[1 | 2] (remove or replace control characters)
-K application_intent
-l login_timeout
-L[c] (list servers, optional clean output)
-m error_level
-M multisubnet_failover (always enabled)
-N[s|m|o] (encrypt connection)
-o output_file
-P password
-q "cmdline query"
-Q "cmdline query" (and exit)
-r[0 | 1] (msgs to stderr)
-R (ignored, client regional settings not used)
-s col_separator
-S [protocol:]server[instance_name][,port]
-t query_timeout
-u (unicode output file)
-U login_id
-v var = "value"
-V error_severity_level
-w screen_width
-W (remove trailing spaces)
-x (disable variable substitution)
-X[1] (disable commands, startup script, environment variables, optional exit)
-y variable_length_type_display_width
-Y fixed_length_type_display_width
-z new_password
-Z new_password (and exit)
--authentication-method (Azure SQL authentication method)
--driver-logging-level (mssql driver log level)
--vertical (print results in vertical format)
-? (usage)
Quebrando alterações do sqlcmd (ODBC)
Vários switches e comportamentos são diferentes na utilidade sqlcmd (Go). Para a lista mais atualizada de flags em falta para compatibilidade com versões anteriores, veja a discussão Prioritize implementation of back-compat flags no GitHub.
sqlcmd (Go) suporta o
-Pswitch. Para a Autenticação SQL Server, pode fornecer palavras-passe através destes mecanismos:- O
-Pinterruptor de linha de comandos - A variável de ambiente
SQLCMDPASSWORD - O comando
:CONNECT - Quando solicitado, digite a palavra-passe para completar a ligação
- O
O
-rinterruptor exige um0argumento ou1argumento.O interruptor
-Ré ignorado. O runtime do Go não fornece acesso à informação local do utilizador.O
-Iinterruptor é ignorado. Identificadores entre aspas estão sempre ativados. Para desativar o comportamento do identificador entre aspas, adicioneSET QUOTED IDENTIFIER OFFnos seus scripts.O
-Minterruptor é ignorado. sqlcmd (Go) permite sempre o failover multi-sub-rede.O
-Nutiliza um valor de cadeia para especificar a escolha de encriptação, que é uma des[trict],t[rue]/m[andatory]/yes/1,o[ptional]/no/0/f[alse], ou .disable- Se não fornecer
-Ne-C, o sqlcmd negocia autenticação com o servidor sem validar o certificado do servidor. - Se fornecer
-Nmas não-C, sqlcmd requer a validação do certificado do servidor. Um valorfalsepara criptografia ainda pode levar à criptografia do pacote de login. - Se fornecer ambos
-Ne-C, sqlcmd usa os valores deles para negociação de encriptação. - Para mais informações sobre negociação de encriptação cliente/servidor, consulte MS-TDS PRELOGIN.
Important
No SQL Server 2025 (17.x),
-Npode sero(paraoptional),m(paramandatory, o padrão), ous(parastrict). Se você não incluir-N,-Nm(formandatory) é o padrão. Este comportamento representa uma mudança significativa em relação ao SQL Server 2022 (16.x) e versões anteriores.- Se não fornecer
Com o
-uswitch, o ficheiro de saída Unicode gerado é precedido pela marca de ordem de bytes (BOM) UTF-16 little-endian.Alguns comportamentos que foram mantidos para manter a compatibilidade com
OSQLpodem ter sido 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. Este comportamento é diferente da versão ODBC, que permite que a consulta executadaEXIT(query)se estenda por várias linhas.
sqlcmd (Go) suporta memória partilhada, pipes nomeados e transporte TCP. Use o prefixo de protocolo apropriado no nome do servidor para forçar um protocolo:
-
lpcpara memória partilhada (apenas localhost) -
nppara tubos nomeados ou utilizar o caminho de tubo nomeado UNC como nome do servidor -
tcppara TCP
Se não especificar um protocolo, o sqlcmd tenta marcar esta ordem: lpc>np>tcp. Ao ligar-se a um host remoto, lpc é ignorado.
Enhancements
:Connecttem um parâmetro opcional-Gpara selecionar um dos métodos de autenticação para o Banco de Dados SQL do Azure -SqlAuthentication,ActiveDirectoryDefault,ActiveDirectoryIntegrated,ActiveDirectoryServicePrincipal,ActiveDirectoryManagedIdentity,ActiveDirectoryPassword. Para obter mais informações, consulte Autenticar com o Microsoft Entra ID no sqlcmd. Se-Gnã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 parâmetro de linha de comando
--driver-logging-levelpermite ver registos do drivergo-mssqldb. Use64para ver todos os vestígios.sqlcmd (Go) pode imprimir resultados usando um formato vertical. Use a opção
--verticalna linha de comando para defini-lo. A variável de scriptSQLCMDFORMATtambém a controla.
Opções da linha de comandos
A tabela a seguir lista as opções de linha de comando disponíveis no sqlcmd e quais sistemas operacionais eles suportam.
Opções relacionadas com login
-A
Aplica-se a: apenas para Windows. Linux e macOS não são suportados.
Entra no SQL Server com uma conexão de administrador (DAC) dedicada. Usa este tipo de ligação para diagnosticar 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 ligar-se ao Azure SQL Database usando -A, deve ser administrador no servidor SQL lógico. O DAC não está disponível para um administrador do Microsoft Entra.
Note
Para obter informações sobre como fazer uma conexão de administrador dedicado (DAC) no macOS ou Linux, consulte Diretrizes de programação.
-C
Use esta opção para configurar o cliente 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ão fornecer
-Ne-C, o sqlcmd negocia autenticação com o servidor sem validar o certificado do servidor. - Se fornecer
-Nmas não-C, sqlcmd requer a validação do certificado do servidor. Um valorfalsepara criptografia ainda pode levar à criptografia do pacote de login. - Se fornecer ambos
-Ne-C, sqlcmd usa os seus valores para negociação de encriptação.
- 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 de base de dados padrão 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, veja Suporte a DSN em sqlcmd e bcp.
Note
A opção -D só está disponível em clientes Linux e macOS. Nos clientes Windows, refere-se a uma opção obsoleta que é removida e ignorada.
-Eu 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 o sqlcmd variável de script SQLCMDLOGINTIMEOUT. O tempo limite padrão para login em sqlcmd é de 8 segundos. Ao utilizar a -G opção de se ligar ao Azure SQL Database ou Azure Synapse Analytics e autenticar com o Microsoft Entra ID, recomenda-se um valor de timeout de pelo menos 30 segundos. O tempo limite de login deve ser um número entre 0 e 65534. Se o valor não for numérico, ou não se enquadrar nesse intervalo, o sqlcmd gera 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.
Note
Para obter mais informações sobre como fazer conexões confiáveis que usam autenticação integrada de um cliente Linux ou macOS, consulte Usando autenticação integrada.
-F hostname_in_certificate
Especifica um Nome Comum (CN) ou Nome Alternativo da Entidade (SAN) diferente e esperado no certificado do servidor para ser usado durante a validação do certificado do servidor. Sem essa opção, a validação do certificado garante que o CN ou a SAN no certificado corresponda ao nome do servidor ao qual você está se conectando. Pode usar este parâmetro quando o nome do servidor não corresponde ao CN ou SAN, por exemplo, ao usar aliases DNS.
Por exemplo:
sqlcmd -S server01 -Q "SELECT TOP 100 * FROM WideWorldImporters.Sales.Orders" -A -Ns -F server01.adventure-works.com
Note
sqlcmd (Go) também é usado -F para especificar o nome do host no certificado do servidor. Para imprimir resultados em formato vertical, sqlcmd (Go) usa o parâmetro --vertical em vez disso.
-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 a sua versão, execute sqlcmd -?.
-G
Use esta opção para autenticar com o Microsoft Entra ao ligar-se ao Azure SQL Database ou Azure Synapse Analytics. Esta opção define o sqlcmd variável de script SQLCMDUSEAAD = true. A opção -G requer pelo menos sqlcmd versão 13.1. Para determinar a sua versão, execute sqlcmd -?. Para obter mais informações, consulte Autenticação do Microsoft Entra para Azure SQL. 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 o Download ODBC Driver 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 Autenticar com o ID do Microsoft Entra no sqlcmd.
- H workstation_name
Um nome de estação de trabalho. Esta opção define o sqlcmd variável de script SQLCMDWORKSTATION. O nome da estação de trabalho aparece na coluna hostname da vista de catálogo sys.sysprocesses e pode ser retornado usando o procedimento armazenado sp_who. Se não especificares esta opção, o padrão é o nome atual do computador. Use este nome para identificar diferentes sessões sqlcmd .
-j
Imprime mensagens de erro brutas na tela.
-J server_certificate
Aplica-se a: sqlcmd (ODBC), Linux e macOS apenas. O Windows não é suportado.
Especifica o caminho para um ficheiro de certificado de servidor. Este ficheiro é comparado com o certificado de encriptação da ligação do servidor. A correspondência é feita em vez da validação padrão do certificado (expiração, nome do host, cadeia de confiança, e assim por diante). Os formatos de certificados aceites são PEM, DER e CER.
Utilize esta opção ao ligar-se a servidores que utilizam certificados auto-assinados ou certificados emitidos por uma autoridade certificadora privada. Se a encriptação estiver ativada e a validação do certificado falhar, a ligação falha.
Por exemplo:
sqlcmd -S server01 -Q "SELECT TOP 100 * FROM WideWorldImporters.Sales.Orders" -A -Ns -J /etc/ssl/certs/server_certificate.cer
-K intenção_da_aplicação
Declara o tipo de carga de trabalho do aplicativo ao se conectar a um servidor. O único valor suportado atualmente é ReadOnly. Se não especificar -K, o sqlcmd não suporta conectividade a uma réplica secundária num grupo de disponibilidade. Para obter mais informações, consulte Transferir carga de trabalho de leitura apenas para a réplica secundária de um grupo de disponibilidade Always On.
Note
-K não é suportado no SUSE Linux Enterprise Server (SLES). No entanto, você pode especificar a ApplicationIntent=ReadOnly palavra-chave em um arquivo DSN passado para sqlcmd. Para obter mais informações, consulte Suporte a DSN em sqlcmd e bcp neste artigo mais adiante.
Para obter mais informações, consulte Alta disponibilidade e recuperação de desastres no Linux e macOS.
- 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 não especificar -M, -M está desligado.
Para obter mais informações, consulte:
- Conectar-se a um ouvinte de grupo de disponibilidade Always On
- Referência para a criação e configuração de grupos de disponibilidade Always On
- Clustering de Failover e grupos de disponibilidade Always On (SQL Server)
- Transferir carga de trabalho só de leitura para a réplica secundária de um grupo de disponibilidade Always On
Note
-M não é suportado no SUSE Linux Enterprise Server (SLES). No entanto, você pode especificar a MultiSubnetFailover=Yes palavra-chave em um arquivo DSN passado para sqlcmd. Para obter mais informações, consulte Suporte a DSN em sqlcmd e bcp neste artigo mais adiante.
Para obter mais informações, consulte Alta disponibilidade e recuperação de desastres no Linux e macOS.
-N[s|m|o]
O cliente utiliza esta opção para solicitar uma ligação encriptada.
O -N interruptor pode ser o (para optional), m (para mandatory, o padrão), ou s (para strict). Se não incluir -N, o padrão é -Nm (para mandatory). Este padrão é uma alteração significativa em relação ao SQL Server 2022 (16.x) e versões anteriores, onde o padrão é -No.
Para o utilitário sqlcmd (Go), -N usa um valor de cadeia de caracteres que pode ser um de true, false ou disable para especificar a escolha de criptografia. (default é o mesmo que omitir o parâmetro):
Se não fornecer
-Ne-C, o sqlcmd negocia autenticação com o servidor sem validar o certificado do servidor.Se fornecer
-Nmas não-C, sqlcmd exige a validação do certificado do servidor. Um valorfalsepara criptografia ainda pode levar à criptografia do pacote de login.Se fornecer ambos
-Ne-C, o sqlcmd usa os seus valores para negociação de encriptação.
-P senha
Uma senha especificada pelo usuário. As palavras-passe diferenciam maiúsculas de minúsculas. Se usares a opção -U, mas não usares a opção -P nem definires a variável de ambiente SQLCMDPASSWORD, o sqlcmd pede ao utilizador uma palavra-passe. Não use uma palavra-passe nula (em branco), mas pode especificar a palavra-passe nula usando um par de aspas duplas contíguas para o valor do parâmetro ("").
Important
Usar -P é 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.
Use 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 o seguinte comando. Substitua <password> por uma senha válida.
SET SQLCMDPASSWORD=<password>
sqlcmd
SET SQLCMDPASSWORD=<password>
sqlcmd
SET SQLCMDPASSWORD=<password>
sqlcmd
Se a combinação de nome de usuário e senha estiver incorreta, uma mensagem de erro será gerada.
Note
A OSQLPASSWORD variável de ambiente é 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 usar a -P opção com a -E opção, é gerada uma mensagem de erro.
Se usar a -P opção com mais do que um argumento, é gerada uma mensagem de erro e o programa sai.
Uma senha contendo caracteres especiais pode gerar uma mensagem de erro. Você deve escapar de caracteres especiais ao usar -Pou usar a variável de ambiente SQLCMDPASSWORD.
No Linux e macOS, quando usado com a -G opção sem -U, -P especifica um arquivo que contém um token de acesso (v17.8+). O arquivo de token deve estar no formato UTF-16LE (sem BOM).
Os tokens de acesso podem ser obtidos através de vários métodos. Você deve garantir que o token de acesso esteja correto byte por byte, porque ele é enviado as-is. O comando de exemplo seguinte obtém um token de acesso. O comando usa os comandos CLI do Azure e Linux e o salva em um arquivo no formato adequado. Se a codificação padrão do seu sistema ou terminal não for ASCII ou UTF-8, talvez seja necessário ajustar as opções de iconv. Certifique-se de proteger cuidadosamente o arquivo resultante e excluí-lo quando não for mais necessário.
az account get-access-token --resource https://database.windows.net --output tsv | cut -f 1 | tr -d '\n' | iconv -f ascii -t UTF-16LE > /tmp/tokenFile
-S [protocolo:]servidor[\instance_name][,porta]
Especifica a instância do SQL Server à qual se conectar. Esta opção define o sqlcmd variável de script 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 não especificares um computador servidor, o sqlcmd liga-se à instância padrão do SQL Server no computador local. Esta opção é necessária quando executas sqlcmd a partir 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.
Note
A OSQLSERVER variável de ambiente é 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.
O driver ODBC no Linux e macOS requer -S. O único valor de protocolo válido é tcp.
- Tu login_id
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).
Note
A OSQLUSER variável de ambiente é 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 usar a -U opção com a -E opção (descrita mais adiante neste artigo), é gerada uma mensagem de erro. Se a opção -U for seguida por mais de um argumento, uma mensagem de erro será gerada e o programa será encerrado.
- z new_password
Altere a palavra-passe. Substitua <oldpassword> pela senha antiga e <newpassword> pela nova senha.
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
-Z new_password
Altere a senha e saia. Substitua <oldpassword> pela senha antiga e <newpassword> pela nova senha.
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
Opções de entrada e 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 não especificar uma página de códigos, o sqlcmd usa a página de códigos atual para ficheiros de entrada e saída, a menos que o ficheiro de entrada seja um ficheiro Unicode, caso em que não é necessária conversão.
sqlcmd reconhece automaticamente os ficheiros de entrada Unicode big-endian e little-endian. Se especificar a
-uopção, a saída é sempre Unicode little-endian.Se não especificares um ficheiro de saída, a página de código de saída é a página de código da consola. Essa abordagem permite que a saída seja exibida corretamente no console.
Assume-se que múltiplos ficheiros de entrada usam a mesma página de códigos. 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.
Note
No Linux, o número da página de código é um valor numérico que especifica uma página de código Linux instalada (disponível desde 17.5.1.1).
- Eu input_file[,input_file2...]
Identifica o arquivo que contém um lote de instruções Transact-SQL ou procedimentos armazenados. Podes especificar vários ficheiros que o sqlcmd lê e processa por ordem. Não use espaços entre nomes de arquivos.
O SQLCMD verifica primeiro se todos os ficheiros especificados existem. Se um ou mais arquivos não existirem, sqlcmd será encerrado. A -i opção e as -Q/-q opções são mutuamente exclusivas.
Note
Se você usar a -i opção seguida por um ou mais parâmetros extras, deverá usar um espaço entre o parâmetro e o valor. Este requisito é um problema conhecido no sqlcmd (Go).
Exemplos de caminhos:
-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.
Pode usar esta opção mais do que uma vez:
sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>
- O output_file
Identifica o arquivo que recebe a saída de sqlcmd.
Se especificar -u, sqlcmd armazena a output_file em formato Unicode. Se o nome do ficheiro não for válido, o sqlcmd gera uma mensagem de erro e sai.
sqlcmd não oferece suporte à gravação simultânea de vários processos de sqlcmd no mesmo arquivo. Se isto acontecer, considere a saída do ficheiro corrompida ou incorreta. A opção -f também é relevante para formatos de arquivo.
O SQLCMD cria este ficheiro se ele não existir.
O SQLCMD sobrescrive um ficheiro com o mesmo nome de uma sessão anterior. O arquivo especificado aqui não é o arquivo stdout. Se especificar um stdout ficheiro, o sqlcmd não usa esse ficheiro.
Exemplos de caminhos:
-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.
Note
Para o utilitário sqlcmd (Go), -r requer um argumento 0 ou 1.
-R
Aplica-se apenas a: sqlcmd (ODBC).
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.
Note
No Linux e macOS, -R atualmente usa en_US apenas formatação (inglês dos EUA).
-u
Especifica que output_file é armazenado no formato Unicode, independentemente do formato do input_file.
Note
Para a utilidade sqlcmd (Go), o ficheiro de saída Unicode gerado é prefixado com a marca BOM de ordem de bytes (little-endian) UTF-16.
Opções de execução de consulta
-e
Grava scripts de entrada no dispositivo de saída padrão (stdout).
-I
Aplica-se apenas a: sqlcmd (ODBC).
Define a opção de conexão SET QUOTED_IDENTIFIER como ON. A predefinição é OFF. Para obter mais informações, consulte SET QUOTED_IDENTIFIER.
Note
Para desativar o comportamento do identificador entre aspas no utilitário sqlcmd (Go), adicione SET QUOTED IDENTIFIER OFF nos seus scripts.
-q "consulta da linha de comandos"
Executa uma consulta quando o SQL começa, mas não sai do SQL quando a consulta termina. Podes executar múltiplas consultas delimitadas por ponto e vírgula. Use aspas ao redor da consulta, conforme mostrado no exemplo a seguir.
No prompt de comando, digite:
sqlcmd -d AdventureWorks2025 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2025 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2025 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
Important
Não use o terminador GO na consulta.
Se especificares -b juntamente com esta opção, o sqlcmd sai com um erro. A -b opção é descrita noutro local deste artigo.
-Q "consulta de linha de comandos"
Executa uma consulta quando sqlcmd começa e depois sai imediatamente de sqlcmd. Pode executar múltiplas consultas delimitadas por ponto e vírgula.
Use aspas ao redor da consulta, conforme mostrado no exemplo a seguir.
No prompt de comando, digite:
sqlcmd -d AdventureWorks2025 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2025 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2025 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
Important
Não use o terminador GO na consulta.
Se especificares -b juntamente com esta opção, o sqlcmd sai com um erro. A -b opção é descrita noutro local 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 não especificares um valor query_timeout , o comando não expira. O query_timeout deve ser um número entre 1 e 65534. Se fornecer um valor que não é numérico ou que não se enquadra nesse intervalo, o sqlcmd gera um erro.
Note
O valor real de timeout pode variar do valor especificado da query_timeout por vários segundos.
-v var = valor [ var = valor... ]
Aplica-se a: apenas para Windows. Linux e macOS não são suportados.
Cria uma variável de scripting sqlcmd para usar num script sqlcmd .
Coloque o valor entre aspas se o valor contiver espaços. Você pode especificar vários valores de <var>="<value>". Se algum dos valores que especifica contiver erros, o sqlcmd gera uma mensagem de erro e depois sai.
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
-cabeçalhos h
Especifica o número de linhas a imprimir entre os cabeçalhos das colunas. A definição padrão imprime os títulos uma vez para cada conjunto de resultados de consulta. Esta opção define o sqlcmd variável de script SQLCMDHEADERS.
-1 Use para especificar que os cabeçalhos não são impressos. Um valor inválido faz com que o sqlcmd gere uma mensagem de erro e depois 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.
-
-kremove caracteres de controle. -
-k1substitui cada caractere de controle por um espaço. -
-k2substitui 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 screen_width
Especifica a largura da tela para a saída. Esta opção define o sqlcmd variável de script SQLCMDCOLWIDTH. 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
Elimina os espaços finais da coluna. Use esta opção juntamente com a -s opção ao preparar dados que pretende exportar para outra aplicação. Não pode ser usado com as opções -y ou -Y.
- Y variable_length_type_display_width
Define a variável de script sqlcmdSQLCMDMAXVARTYPEWIDTH. O valor predefinido é 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)
- text
- ntext
- image
As UDTs podem ser de comprimento fixo, dependendo da implementação. Se este comprimento de um UDT de comprimento fixo for inferior ao display_width, o valor do UDT retornado não é afetado. No entanto, se o comprimento for maior que display_width, a saída será truncada.
Caution
Use a -y 0 opção com extrema cautela, pois ela pode causar problemas significativos de desempenho no servidor e na rede, dependendo do tamanho dos dados retornados.
- E fixed_length_type_display_width
Define a variável de script sqlcmdSQLCMDMAXFIXEDTYPEWIDTH. O valor 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 sqlcmd devolve à ERRORLEVEL variável é 1 quando a mensagem de erro do SQL Server tem um nível de gravidade superior a 10. Caso contrário, o valor devolvido é 0. Se definires a -V opção, além de -b, o sqlcmd não reporta erro se o nível de gravidade for inferior aos valores definidos pela -V opção. Os ficheiros em lote do prompt de comando podem testar o valor de ERRORLEVEL e lidar com 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.
O SQLCMD envia mensagens com um nível de gravidade superior ou igual a este nível. Quando defines este valor para -1, sqlcmd envia todas as mensagens, incluindo mensagens informativas. Não inclua 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_gravidade_do_erro
Controla o nível de gravidade que o sqlcmd usa para definir a ERRORLEVEL variável. 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. Podes usar ficheiros batch e CMD para testar o valor da ERRORLEVEL variável.
Opções diversas
-um packet_size
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 GO comandos. 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 processamento em lote. Por padrão, deve terminar os comandos e enviá-los para o SQL Server usando a palavra GO numa linha separada, seguida de Enter. 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]
Aplica-se a: apenas para Windows. Linux e macOS não são suportados.
Lista os computadores servidores configurados localmente e os nomes dos computadores servidores que estão transmitindo na rede. Não podes usar este parâmetro em combinação com outros parâmetros. O número máximo de computadores servidor que podem ser listados é 3.000. Se a lista de servidores for truncada devido ao tamanho do buffer, é exibida uma mensagem de aviso.
Note
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 especificar o parâmetro opcional c, a saída aparece sem a linha de cabeçalho Servers:, e cada linha do servidor é listada sem espaços iniciais. 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.)
Where:
-
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 especificar o parâmetro 1opcional , o formato de saída das estatísticas está em formato separado por dois pontos que pode ser facilmente importado para uma folha de cálculo ou processado por um script.
Se especificar o parâmetro opcional como qualquer valor diferente de 1, gera-se um erro e sqlcmd encerra.
-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 especificar o parâmetro 1opcional , sqlcmd gera uma mensagem de erro e depois sai. Os seguintes comandos são desativados quando a opção -X é usada:
ED-
!!Comando
Se especificares essa -X opção, isso impede que variáveis de ambiente sejam passadas para o 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 da sintaxe das opções de sqlcmd.
Note
No macOS, execute o comando sqlcmd '-?' (com aspas) em vez disso.
Remarks
Não tens de usar as opções pela ordem mostrada na secção de sintaxe.
Note
Se você usar a -i opção seguida por um ou mais parâmetros extras, deverá usar um espaço entre o parâmetro e o valor. Este requisito é um problema conhecido no sqlcmd (Go).
O SQLCMD imprime uma linha em branco entre múltiplos conjuntos de resultados num lote. Além disso, a <x> rows affected mensagem não aparece quando não se aplica à instrução em execução.
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 sqlcmd.
Note
As opções -l, -Q, -Z, ou -i fazem com que o sqlcmd saia após a execução.
O sistema operativo subjacente determina o comprimento total da linha de comandos sqlcmd no ambiente de comandos (por exemplo, cmd.exe ou bash), incluindo todos os argumentos e variáveis expandidas.
Suporte a DSN em sqlcmd e bcp
Você pode especificar um nome de fonte de dados (DSN) em vez de um nome de servidor no sqlcmd ou bcp -S opção (ou sqlcmd :Connect comando) se especificar -D. Se usares a -D opção, sqlcmd e bcp ligam-se ao servidor especificado no DSN pela -S opção.
Os DSNs de sistema são armazenados no ficheiro odbc.ini no diretório ODBC SysConfigDir (/etc/odbc.ini em instalações padrão). Os DSNs de usuário são armazenados no .odbc.ini diretório base de um usuário (~/.odbc.ini).
Em sistemas Windows, os DSNs de sistema e usuário são armazenados no registro e gerenciados via odbcad32.exe.
bcp e sqlcmd não suportam DSNs de arquivos.
Para uma lista de entradas suportadas pelo driver, consulte DSN e Cadeias de Conexão, Palavras-chave e Atributos.
Numa DSN, apenas a DRIVER entrada é necessária. Para se ligar a um servidor remoto, sqlcmd ou bcp precisa de um valor no SERVER elemento. Se o SERVER elemento estiver vazio ou não estiver presente no DSN, o sqlcmd ou o bcp tentam ligar-se à instância padrão no sistema local.
Quando você usa bcp em sistemas Windows, o SQL Server 2017 (14.x) e versões anteriores exigem o driver do SQL Native Client 11 (sqlncli11.dll), enquanto o SQL Server 2019 (15.x) e versões posteriores exigem o driver Microsoft ODBC Driver 17 para SQL Server (msodbcsql17.dll).
Se especificar a mesma opção tanto na DSN como na linha de comandos sqlcmd ou bcp , a opção da linha de comandos sobrepõe-se ao valor usado na DSN. Por exemplo, se o DSN tiver uma DATABASE entrada e a linha de comando sqlcmd incluir -d, o valor passado para -d será usado. Se especificar Trusted_Connection=yes na DSN, é usada a autenticação por Kerberos; nome de utilizador (-U) e palavra-passe (-P), se fornecidos, são ignorados.
Pode modificar scripts existentes que invocam isql para usar sqlcmd, definindo o seguinte alias: alias isql="sqlcmd -D".
Práticas recomendadas do sqlcmd
Utilize 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 numa sessão sqlcmd , em vez de usar uma série de sessões.
Defina valores de timeout para execução por lote ou consulta superiores ao tempo de execução esperado para o lote ou consulta.
Use as seguintes práticas para ajudar a maximizar a correção:
Use
-V 16para registrar quaisquer mensagens de nível de gravidade 16 . As mensagens de gravidade 16 indicam erros gerais que pode corrigir.Verifique o código de saída e
DOS ERRORLEVELa variável após a saída do processo. O SQLCMD retorna0normalmente. Caso contrário, define oERRORLEVELconforme configurado por-V. Ou seja, não espereERRORLEVELque seja o mesmo valor do número de erro reportado 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 do sqlcmd para indicar porque é que o sqlcmd terminou. O seu valor é influenciado pela especificação do-bparâmetro.
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
- Verifique a versão instalada do utilitário sqlcmd
- Baixe e instale o utilitário sqlcmd
- Comandos no utilitário sqlcmd
- Usar sqlcmd com variáveis de script
- Guia de início rápido: executar imagens de contêiner do SQL Server Linux com o Docker
- Inicie o utilitário sqlcmd
- Executar T-SQL a partir de um arquivo de script com sqlcmd
- Usar sqlcmd
- Conectar-se ao SQL Server com sqlcmd
- Editar scripts SQLCMD com o Editor de Consultas
- Criar um Passo de Trabalho CmdExec