Compartilhar via


Utilitário sqlcmd

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Banco de dados SQL no Microsoft Fabric

Use o utilitário sqlcmd para inserir instruções Transact-SQL, procedimentos do sistema e arquivos de script por meio de vários modos:

  • No prompt de comando.
  • No Editor de Consultas no 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.

Note

Embora o Microsoft Entra ID seja o novo nome do Azure Active Directory (Azure AD), para evitar a interrupção de ambientes existentes, o Azure AD ainda permanecerá em alguns elementos codificados, como campos de interface do usuário, 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-mssqldb-based sqlcmd, às vezes chamado de go-sqlcmd. Esta versão é uma ferramenta autônoma que você pode baixar independentemente do SQL Server. Ele é executado no 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-tools pacote no Linux. Ele também é executado no Windows, macOS, Linux e em contêineres.

Para descobrir qual variante e versão do sqlcmd está instalada em seu sistema, confira a versão instalada do utilitário sqlcmd.

Para obter informações sobre como obter sqlcmd, consulte Baixar e instalar o utilitário sqlcmd.

Suporte a TDS 8.0

O SQL Server 2025 (17.x) apresenta suporte ao TDS 8.0 para o utilitário sqlcmd .

Syntax

Neste artigo, os termos opção, parâmetro, argumento de linha de comando e chave são intercambiáveis.

O sqlcmd (Go) tem dois modos de ajuda: --help para subcomandos modernos e -? para sinalizadores 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.

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

Alterações significativas do sqlcmd (ODBC)

Várias opções e comportamentos são diferentes no utilitário sqlcmd (Go). Para obter a lista mais atualizada de sinalizadores ausentes para compatibilidade com versões anteriores, consulte a discussão do GitHub Priorizar a implementação de flags de compatibilidade retroativa.

  • O sqlcmd (Go) dá suporte à opção -P . Para a Autenticação do SQL Server, você pode fornecer senhas por meio desses mecanismos:

    • O -P comutador de linha de comando
    • A variável de ambiente SQLCMDPASSWORD
    • O comando :CONNECT
    • Quando solicitado, digite a senha para concluir uma conexão
  • A -r opção requer um 0 ou 1 argumento.

  • O -R comando é ignorado. O runtime do Go não fornece acesso às informações de localidade do usuário.

  • A -I opção é ignorada. Os identificadores entre aspas estão sempre habilitados. Para desativar o comportamento de identificadores entre aspas, adicione SET QUOTED IDENTIFIER OFF aos seus scripts.

  • O -M interruptor é ignorado. o sqlcmd (Go) sempre habilita o failover de várias sub-redes.

  • A -N utiliza uma cadeia de caracteres para especificar a opção de criptografia, que é uma de s[trict],t[rue]/m[andatory]/yes/1,o[ptional]/no/0/f[alse], ou disable.

    • Se você não fornecer -N e -C, o sqlcmd negociará a autenticação com o servidor sem validar o certificado do servidor.
    • Se você fornecer -N , mas não -C, o sqlcmd exigirá a validação do certificado do servidor. Um valor false para criptografia ainda pode levar à criptografia do pacote de login.
    • Se você fornecer ambos -N e -C, o sqlcmd usará seus valores para negociação de criptografia.
    • Para obter mais informações sobre a negociação de criptografia de cliente/servidor, consulte MS-TDS PRELOGIN.

    Important

    No SQL Server 2025 (17.x), -N pode ser o (para optional), m (para mandatory, o padrão) ou s (para strict). Se você não incluir -N, -Nm (for mandatory) será o padrão. Esse comportamento é uma alteração significativa do SQL Server 2022 (16.x) e das versões anteriores.

  • Com o -u interruptor, o arquivo de saída Unicode gerado é prefixado com a marca de ordem de bytes no formato little-endian do UTF-16.

  • Alguns comportamentos que foram mantidos para manter a compatibilidade com OSQL podem 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 ou aspas abertos para comandos e não solicita linhas sucessivas. Esse comportamento é diferente da versão ODBC, que permite que a consulta executada por EXIT(query) se estenda por várias linhas.

O sqlcmd (Go) dá suporte à memória compartilhada, pipes nomeados e transporte TCP. Use o prefixo de protocolo apropriado no nome do servidor para forçar um protocolo:

  • lpc para memória compartilhada (somente localhost)
  • np para tubos nomeados ou use o caminho UNC do tubo nomeado como o nome do servidor
  • tcp para TCP

Se você não especificar um protocolo, o sqlcmd tentará discar nesta ordem: lpc>np>tcp. Ao se conectar a um host remoto, lpc é ignorado.

Enhancements

  • :Connecttem um parâmetro opcional -G para selecionar um dos métodos de autenticação para o Banco de Dados SQL do Azure – SqlAuthentication, , ActiveDirectoryDefault, , ActiveDirectoryIntegratedActiveDirectoryServicePrincipal, , . ActiveDirectoryManagedIdentityActiveDirectoryPassword Para obter mais informações, consulte Autenticar com o Microsoft Entra ID no sqlcmd. Se -G não for fornecido, será usada a segurança integrada ou a autenticação do SQL Server, dependendo da presença do parâmetro de nome de usuário -U.

  • O parâmetro de linha de comando --driver-logging-level permite que você veja os logs do driver go-mssqldb. Use 64 para ver todos os rastros.

  • sqlcmd (Go) pode imprimir resultados usando um formato vertical. Use a opção --vertical de linha de comando para defini-la. A variável de script SQLCMDFORMAT também a controla.

Opções da linha de comando

A tabela a seguir lista as opções de linha de comando disponíveis no sqlcmd e quais sistemas operacionais eles dão suporte.

Opção de linha de comando Com suporte no Windows Com suporte no Linux e no macOS
Opções relacionadas ao logon
-A Yes No
-C Yes Yes
-d db_name Yes Yes
-D Yes Yes
-l login_timeout Yes Yes
-E Yes Yes
-F hostname_in_certificate Yes Yes
-g Yes Yes
-G Yes Yes
-H workstation_name Yes Yes
-j Yes Yes
-J server_certificate No Yes
-K application_intent Yes Yes
-M multisubnet_failover Yes Yes
-N[s|m|o] Yes Yes
Senha -P Yes Yes
-S [protocolo:]servidor[\nome_da_instância][,porta] Yes Yes
- U login_id Yes Yes
-z new_password Yes Yes
-Z new_password Yes Yes
Opções de entrada/saída
-f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage] Yes Yes
-i input_file[,input_file2...] Yes Yes
-o output_file Yes Yes
-r[0 | 1] Yes Yes
-R Yes Yes
-u Yes Yes
Opções de execução de consulta
-e Yes Yes
-I Yes Yes
-q "consulta linha-de-comando" Yes Yes
-Q "consulta cmdline" Yes Yes
-t query_timeout Yes Yes
-v var = value [ var = value... ] Yes No
-x Yes Yes
Opções de formato
-h Cabeçalhos Yes Yes
-k [1 | 2] Yes Yes
-s col_separator Yes Yes
-w screen_width Yes Yes
-W Yes Yes
-y variable_length_type_display_width Yes Yes
-Y fixed_length_type_display_width Yes Yes
Opções de relatório de erros
-b Yes Yes
-m error_level Yes Yes
-V error_severity_level Yes Yes
Opções diversas
-um packet_size Yes Yes
-c batch_terminator Yes Yes
-L[c] Yes No
-p[1] Yes Yes
-X[1] Yes Yes
-? Yes Yes

-A

Aplica-se apenas a: Windows. Não há suporte para Linux e macOS.

Entre no SQL Server com uma DAC (conexão de administrador dedicada). Use esse tipo de conexão para solucionar problemas de um servidor. Essa conexão funciona apenas com computadores servidor compatíveis com DAC. Se a DAC não estiver disponível, o sqlcmd gerará uma mensagem de erro e será encerrado. Para obter mais informações sobre o DAC, consulte a conexão de diagnóstico para administradores de banco de dados. A opção -A não é compatível com a opção -G. Ao se conectar ao Banco de Dados SQL do Azure usando -A, você deve ser um administrador no SQL Server lógico. O DAC não está disponível para um administrador do Microsoft Entra.

Note

Para obter informações sobre como fazer uma DAC (conexão de administrador dedicada) no macOS ou linux, consulte Diretrizes de programação.

-C

Use essa opção para configurar o cliente para confiar implicitamente no certificado do servidor sem validação. Essa opção é equivalente à opção TRUSTSERVERCERTIFICATE = truedo ADO.NET.

Para o utilitário sqlcmd (Go), as seguintes condições também se aplicam:

  • Se você não fornecer -N e -C, o sqlcmd negociará a autenticação com o servidor sem validar o certificado do servidor.
  • Se você fornecer -N , mas não -C, o sqlcmd exigirá a validação do certificado do servidor. Um valor false para criptografia ainda pode levar à criptografia do pacote de login.
  • Se você fornecer ambos -N e -C, o sqlcmd usará seus valores para negociação de criptografia.

-d db_name

Emite uma instrução USE <db_name> ao iniciar o sqlcmd. Essa opção define a variável de script do sqlcmdSQLCMDDBNAME. Esse parâmetro especifica o banco de dados inicial. O padrão é a propriedade do banco de dados padrão de seu logon. Se o banco de dados não existir, será gerada uma mensagem de erro e o sqlcmd será encerrado.

-D

Interpreta o nome do servidor fornecido para -S como um DSN em vez de um nome de host. Para obter mais informações, consulte o suporte de DSN no sqlcmd e bcp.

Note

A opção -D só está disponível em clientes Linux e macOS. Em clientes Windows, ele se refere a uma opção obsoleta que é removida e é ignorada.

-l login_timeout

Especifica o número de segundos antes que um logon do sqlcmd no driver ODBC expire quando você tentar se conectar a um servidor. Essa opção define a variável de script do sqlcmdSQLCMDLOGINTIMEOUT. O tempo limite padrão de logon do sqlcmd é de oito segundos. Ao usar a opção -G para se conectar ao Banco de Dados SQL do Azure ou ao Azure Synapse Analytics e autenticar-se com a ID do Microsoft Entra, é recomendável um valor de tempo limite de pelo menos 30 segundos. O tempo limite de logon 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 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 um nome de usuário e uma senha para entrar no SQL Server. Por padrão, sem a especificação de -E , o sqlcmd usa a opção de conexão confiável.

A opção -E ignora possíveis definições de variável de ambiente de nome de usuário e senha como SQLCMDPASSWORD. Se a opção -E for usada com a opção -U ou -P, uma mensagem de erro será gerada.

Note

Para obter mais informações sobre como fazer conexões confiáveis que usam a autenticação integrada de um cliente Linux ou macOS, consulte Usando a 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 uso durante a validação do certificado do servidor. Sem essa opção, a validação do certificado garante que o CN ou o SAN no certificado corresponda ao nome do servidor ao qual você está se conectando. Você pode usar esse parâmetro quando o nome do servidor não corresponder à 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

o sqlcmd (Go) também usa -F para especificar o nome do host no certificado do servidor. Para imprimir resultados em formato vertical, o sqlcmd (Go) usa a opção --vertical em vez disso.

-g

Define a configuração de Criptografia de Coluna como Enabled. Para obter mais informações, consulte Always Encrypted. Há suporte apenas para as chaves mestras armazenadas no Repositório de Certificados do Windows. A opção -g exige, no mínimo, o sqlcmd versão 13.1. Para determinar sua versão, execute sqlcmd -?.

-G

Use essa opção para autenticar com o Microsoft Entra ao se conectar ao Banco de Dados SQL do Azure ou ao Azure Synapse Analytics. Essa opção define a variável de script do sqlcmdSQLCMDUSEAAD = true. A opção -G exige, no mínimo, o sqlcmd versão 13.1. Para determinar sua versão, execute sqlcmd -?. Para obter mais informações, consulte Microsoft Entra autenticação para Azure SQL. A opção -A não é compatível 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 tem suporte no Linux nem no macOS. A autenticação integrada do Microsoft Entra requer baixar o Driver ODBC 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 Authenticate with Microsoft Entra ID in sqlcmd.

-H workstation_name

Um nome de estação de trabalho. Essa opção define a variável de script do sqlcmdSQLCMDWORKSTATION. O nome da estação de trabalho aparece na hostname coluna da exibição do sys.sysprocesses catálogo e pode ser retornado usando o sp_who procedimento armazenado. Se você não especificar essa opção, o padrão será o nome do computador atual. Use esse nome para identificar diferentes sessões sqlcmd .

-j

Imprime mensagens de erro brutas na tela.

-J server_certificate

Aplica-se apenas a: sqlcmd (ODBC), Linux e macOS. Não há suporte para Windows.

Especifica o caminho para um arquivo de certificado do servidor. Esse arquivo é comparado ao certificado de criptografia de conexão do servidor. A verificação é feita em vez da validação padrão de certificados (validade, nome do host, cadeia de confiança, etc.). Os formatos de certificado aceitos são PEM, DER e CER.

Use essa opção ao se conectar a servidores que usam certificados autoassinados ou certificados emitidos por uma autoridade de certificação privada. Se a criptografia estiver habilitada e a validação do certificado falhar, a conexão falhará.

Por exemplo:

sqlcmd -S server01 -Q "SELECT TOP 100 * FROM WideWorldImporters.Sales.Orders" -A -Ns -J /etc/ssl/certs/server_certificate.cer

-K application_intent

Declara o tipo de carga de trabalho de aplicativo ao conectar-se a um servidor. O único valor com suporte no momento é ReadOnly. Se você não especificar -K, o sqlcmd não oferecerá suporte à conectividade com uma réplica secundária em um grupo de disponibilidade. Para obter mais informações, consulte Descarregar carga de trabalho somente leitura para a réplica secundária de um grupo de disponibilidade Always On.

Note

-K não há suporte no SLES (SUSE Linux Enterprise Server). No entanto, você pode especificar a ApplicationIntent=ReadOnly palavra-chave em um arquivo DSN passado para sqlcmd. Para obter mais informações, consulte suporte de DSN no sqlcmd e bcp mais adiante neste artigo.

Para obter mais informações, consulte Alta disponibilidade e recuperação de desastre no Linux e no macOS.

-M multisubnet_failover

Sempre especifique -M ao se conectar ao ouvinte do grupo de disponibilidade de um grupo de disponibilidade do SQL Server ou a uma instância de cluster de failover do SQL Server. -M proporciona a detecção mais rápida e a conexão com o servidor (atualmente) ativo. Se você não especificar -M, -M está desativado.

Para obter mais informações, consulte:

Note

-M não há suporte no SLES (SUSE Linux Enterprise Server). No entanto, você pode especificar a MultiSubnetFailover=Yes palavra-chave em um arquivo DSN passado para sqlcmd. Para obter mais informações, consulte suporte de DSN no sqlcmd e bcp mais adiante neste artigo.

Para obter mais informações, consulte Alta disponibilidade e recuperação de desastre no Linux e no macOS.

-N[s|m|o]

O cliente usa essa opção para solicitar uma conexão criptografada.

A -N opção pode ser o (para optional), m (para mandatory, o padrão) ou s (para strict). Se você não incluir -N, o padrão será -Nm (para mandatory). Esse padrão é uma alteração significativa do SQL Server 2022 (16.x) e das versões anteriores, em que o padrão é -No.

Para o utilitário sqlcmd (Go), -N usa um valor de cadeia de caracteres que pode ser de true, falseou disable para especificar a opção de criptografia. (default é o mesmo que omitir o parâmetro):

  • Se você não fornecer -N e -C, o sqlcmd negociará a autenticação com o servidor sem validar o certificado do servidor.

  • Se você fornecer -N , mas não -C, o sqlcmd exigirá a validação do certificado do servidor. Um valor false para criptografia ainda pode levar à criptografia do pacote de login.

  • Se você fornecer ambos -N e -C, o sqlcmd usará seus valores para negociação de criptografia.

Senha -P

Uma senha especificada pelo usuário. As senhas diferenciam maiúsculas de minúsculas. Se você usar a opção -U , mas não usar a opção -P ou definir a variável de ambiente, o SQLCMDPASSWORDsqlcmd solicitará uma senha ao usuário. Não use 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 ("").

Important

Usar -P é inseguro. Evite fornecer a senha na linha de comando. Como alternativa, use a variável de ambiente SQLCMDPASSWORD ou insira de modo interativo a senha omitindo a opção -P.

Use uma senha forte.

A solicitação de senha é exibida ao imprimir a solicitação de senha no console, como a seguir: Password:

A entrada do usuário está oculta. Isso significa que nada é exibido e o cursor fica em posição.

A variável de ambiente SQLCMDPASSWORD permite que você defina uma senha padrão para a sessão atual. Assim, senhas não precisam ser embutidas em código nos arquivos em lote. O exemplo a seguir define primeiro a variável SQLCMDPASSWORD no prompt de comando e acessa o utilitário sqlcmd.

No terminal 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 em relação à variável de ambiente OSQLPASSWORD. Isso significa que o sqlcmd e osql podem ser usados próximos um do outro sem interferência. Os scripts antigos continuam funcionando.

Se você usar a opção -P com a opção -E , uma mensagem de erro será gerada.

Se você usar a opção -P com 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 fazer o escape de caracteres especiais ao usar -P ou usar a variável de ambiente SQLCMDPASSWORD como alternativa.

No Linux e no macOS, quando usado com a opção -G 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).

Tokens de acesso podem ser obtidos por meio de vários métodos. Você deve garantir que o token de acesso esteja correto byte para byte, pois ele é enviado as-is. O comando de exemplo a seguir obtém um token de acesso. O comando usa os comandos da CLI do Azure e Linux e salva-os em um arquivo no formato adequado. Se a codificação padrão do sistema ou terminal não for ASCII ou UTF-8, talvez seja necessário ajustar as iconv opções. Garanta a proteção cuidadosa do arquivo resultante e exclua-o 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[\nome_instância][,porta]

Especifica uma instância do SQL Server a qual se conectar. Essa opção define a variável de script do sqlcmdSQLCMDSERVER.

Especifique server_name para conectar-se à instância padrão do SQL Server nesse computador servidor. Especifique server_name[\instance_name] para conectar-se a uma instância nomeada do SQL Server nesse computador do servidor. Se você não especificar um computador servidor, o sqlcmd se conectará à instância padrão do SQL Server no computador local. Essa opção é necessária quando você executa o sqlcmd de um computador remoto na rede.

Oprotocolo pode ser tcp (TCP/IP), lpc (memória compartilhada) ou np (pipes nomeados).

Se você não especificar um server_name[\instance_name] ao iniciar o sqlcmd, o SQL Server verifica se há uma variável de ambiente SQLCMDSERVER e usa-a.

Note

A OSQLSERVER variável de ambiente é mantida para compatibilidade com versões anteriores. A variável de ambiente SQLCMDSERVER tem precedência em relação à variável de ambiente OSQLSERVER. Isso significa que o sqlcmd e osql podem ser usados próximos um do outro sem interferência. Os scripts antigos continuam funcionando.

O driver ODBC no Linux e no macOS requer -S. O único valor de protocolo válido é tcp.

- U login_id

O nome de logon ou o nome de usuário de banco de dados independente. Para usuários de banco de dados independente, é necessário fornecer a opção de nome de 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 em relação à variável de ambiente OSQLUSER. Isso significa que o sqlcmd e osql podem ser usados próximos um do outro sem interferência. Os scripts antigos continuam funcionando.

Se as opções -U ou -P não forem especificadas, o sqlcmd tentará se conectar usando o modo de Autenticação do Windows. A autenticação se baseia na conta do Windows do usuário que está executando o sqlcmd.

Se você usar a opção -U com a opção -E (descrita posteriormente neste artigo), uma mensagem de erro será gerada. Será gerada uma mensagem de erro se a opção -U for acompanhada de mais de um argumento e o programa será encerrado.

-z new_password

Altere a senha. 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 codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage]

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 instalada no Windows.

Regras de conversão de página de código:

  • Se você não especificar uma página de código, o 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.

  • Osqlcmd reconhece arquivos de entrada Unicode big endian e little endian automaticamente. Se você especificar a opção -u, a saída será sempre Unicode em formato little-endian.

  • Se você não especificar um arquivo de saída, a página de código de saída será a página de código do console. Essa abordagem habilita a saída a ser exibida corretamente no console.

  • Supõe-se que vários arquivos de entrada usem a mesma página de código. Arquivos de entrada Unicode e não Unicode podem ser misturados.

Insira chcp no prompt de comando para verificar a página de código de 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 do Linux instalada (disponível desde 17.5.1.1).

-i input_file[,input_file2...]

Identifica o arquivo que contém um lote de instruções Transact-SQL ou procedimentos armazenados. Você pode especificar vários arquivos que o sqlcmd lê e processa em ordem. Não use espaço entre nomes de arquivos. O sqlcmd verifica primeiro se todos os arquivos especificados existem. Se um ou mais arquivos não existirem, o sqlcmd será encerrado. A -i opção e as -Q/-q opções são mutuamente exclusivas.

Note

Se você usar a opção -i seguida por um ou mais parâmetros extras, deverá usar um espaço entre o parâmetro e o valor. Esse requisito é 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 arquivos que contêm espaços devem estar entre aspas.

Você pode usar essa opção 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 output_file

Identifica o arquivo que recebe a saída do sqlcmd.

Se você especificar -u, o sqlcmd armazenará o output_file no formato Unicode. Se o nome do arquivo não for válido, o sqlcmd gerará uma mensagem de erro e sairá. O sqlcmd não dá suporte à gravação simultânea de vários processos sqlcmd no mesmo arquivo. Se isso acontecer, considere a saída do arquivo corrompida ou incorreta. A opção -f também é relevante para formatos de arquivo. O sqlcmd criará esse arquivo se ele não existir. O sqlcmd substitui um arquivo com o mesmo nome de uma sessão anterior. O arquivo aqui especificado não é o arquivo stdout. Se você especificar um stdout arquivo, o sqlcmd não usará esse arquivo.

Exemplos de caminho:

-o C:< filename>
-o \\<Server>\<Share$>\<filename>
-o "C:\Some Folder\<file name>"

Os caminhos de arquivos que contêm espaços devem estar entre aspas.

-r[0 | 1]

Redireciona a saída da mensagem de erro para a tela (stderr). Se você não especificar um parâmetro ou se especificar 0, serão redirecionadas somente mensagens de erro com nível de severidade 11 ou acima disso. Se você especificar 1, serão redirecionadas todas as saídas de mensagens de erro inclusive PRINT. Essa opção não terá efeito se você usar -o. Por padrão, 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 o sqlcmd localize colunas numéricas, de moeda, de data e de 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 no macOS, -R atualmente só usa a formatação en_US (inglês dos EUA).

-u

Especifica se output_file é armazenado no formato Unicode, independentemente do formato de input_file.

Note

Para o utilitário sqlcmd (Go), o arquivo de saída Unicode gerado é prefixado com a marca de ordem de bytes (BOM) UTF-16 little-endian.

Opções de execução de consultas

-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 configuração padrão é OFF. Para saber mais, confira SET QUOTED_IDENTIFIER.

Note

Para desabilitar o comportamento do identificador entre aspas, no utilitário sqlcmd (Go), adicione SET QUOTED IDENTIFIER OFF aos seus scripts.

-q "consulta de linha de comando"

Executa uma consulta quando o sqlcmd é iniciado, mas não sai do sqlcmd quando a consulta termina. Você pode executar várias consultas delimitadas com um ponto e vírgula. Use aspas na consulta, conforme o 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 você especificar -b junto com essa opção, o sqlcmd sairá com um erro. A -b opção é descrita em outro lugar neste artigo.

-Q "consulta da linha de comando"

Executa uma consulta quando o sqlcmd é iniciado e fecha o sqlcmdimediatamente. Você pode executar várias consultas delimitadas com um ponto e vírgula.

Use aspas na consulta, conforme o 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 você especificar -b junto com essa opção, o sqlcmd sairá com um erro. A -b opção é descrita em outro lugar neste artigo.

-t query_timeout

Especifica quanto segundos faltam para que um comando (ou instrução Transact-SQL) atinja o tempo limite. Essa opção define a variável de script do sqlcmdSQLCMDSTATTIMEOUT. Se você não especificar um valor para query_timeout, o comando não terá tempo limite. O query_timeout deve ser um número entre 1 e 65534. Se você fornecer um valor que não seja numérico ou não se enquadra nesse intervalo, o sqlcmd gerará um erro.

Note

O valor de tempo limite real pode variar do valor de query_timeout especificado em vários segundos.

-v var = valor [ var = valor... ]

Aplica-se apenas a: Windows. Não há suporte para Linux e macOS.

Cria uma variável de scripting sqlcmd para uso em um script sqlcmd.

Se o valor contiver espaços, mantenha-o entre aspas. Você pode especificar vários valores <var>="<value>". Se qualquer um dos valores especificados contiver erros, o sqlcmd gerará uma mensagem de erro e sairá.

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 o sqlcmd ignore 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 de coluna. A configuração padrão imprime os títulos uma vez para cada conjunto de resultados da consulta. Essa opção define a variável de script do sqlcmdSQLCMDHEADERS. Use -1 para especificar que os cabeçalhos não sejam impressos. Um valor inválido faz com que o 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. Esse parâmetro preserva a formatação de 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 do separador de coluna. O padrão é um espaço em branco. Essa opção define a variável de script do sqlcmdSQLCMDCOLSEP. Para usar caracteres com um significado especial para o sistema operacional como, por exemplo, E comercial (&) ou ponto e vírgula (;), use-os entre aspas ("). O separador de coluna pode ser qualquer caractere de 8 bits.

-w screen_width

Especifica a largura de tela para saída. Essa opção define a variável de script do sqlcmdSQLCMDCOLWIDTH. A largura da coluna precisa ser um número maior que 8 e menor que 65536. Se a largura da coluna especificada não estiver nesse intervalo, o sqlcmd vai gerar uma mensagem de erro. A largura padrão é 80 caracteres. Quando uma linha de saída excede a largura de coluna especificada, ela inclui a próxima linha.

-W

Remove espaços à direita de uma coluna. Use essa opção junto com a opção -s ao preparar dados que você deseja exportar para outro aplicativo. Não é possível usar com as opções -y ou -Y.

-y variable_length_type_display_width

Define a variável de script sqlcmdSQLCMDMAXVARTYPEWIDTH. O valor padrão é 256. Ele limita o número de caracteres retornados para os tipos de dados com comprimento variável grande:

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • xml
  • UDTs (tipos de dados definidos pelo usuário)
  • text
  • ntext
  • image

UDTs podem ter 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. Porém, se o tamanho for mais longo que display_width, a saída será truncada.

Caution

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 fixed_length_type_display_width

Define a variável de script sqlcmdSQLCMDMAXFIXEDTYPEWIDTH. O valor padrão é 0 (ilimitado). Limita o número de caracteres retornado para os tipos de dados a seguir:

  • char(n), em que 1 <= n<= 8000
  • nchar(n), em que 1 <= n<= 4000
  • varchar(n), em que 1 <= n<= 8000
  • nvarchar(n), em que 1 <= n<= 4000
  • varbinary(n), em que 1 <= n<= 4000
  • sql_variant

Opções de relatório de erros

-b

Especifica que o sqlcmd é encerrado e retorna um valor DOS ERRORLEVEL em caso de erro. O valor que o ERRORLEVEL retorna à variável é 1 quando a mensagem de erro do SQL Server tem um nível de severidade maior que 10. Caso contrário, o valor retornado será 0. Se você definir a opção -V, além de -b, o sqlcmd não indicará um erro se o nível de severidade for menor do que os valores definidos pela opção -V. Arquivos em lote do prompt de comando podem testar o valor de ERRORLEVEL e tratar o erro adequadamente. Osqlcmd não relata erros para o nível de severidade 10 (mensagens informativas).

Se o script sqlcmd tiver um comentário incorreto, erro de sintaxe ou se estiver sem uma variável de script, ERRORLEVEL retornará 1.

-m nível_de_erro

Controla quais mensagens de erro são enviadas para stdout. O sqlcmd envia mensagens que têm um nível de severidade maior ou igual a esse nível. Quando você define esse valor como -1, o sqlcmd envia todas as mensagens, incluindo mensagens informativas. Não inclua espaços entre o -m e -1. Por exemplo, -m-1 é válido e -m -1 é inválido.

Essa opção também define a variável de script do sqlcmdSQLCMDERRORLEVEL. Essa variável tem um padrão de 0.

-V error_severity_level

Controla o nível de severidade que o sqlcmd usa para definir a ERRORLEVEL variável. Mensagens de erro com níveis de severidade maiores ou iguais a este valor definido por ERRORLEVEL. Valores menores que 0 são reportados como 0. Você pode usar arquivos em lote e CMD para testar o valor da variável ERRORLEVEL.

Opções diversas

-um packet_size

Exige um pacote de tamanho diferente. Essa opção define a variável de script do sqlcmdSQLCMDPACKETSIZE. packet_size precisa ser um valor entre 512 e 32767. O padrão é 4096. Um tamanho de pacote maior pode melhorar o desempenho para a execução de scripts que têm muitas instruções Transact-SQL entre GO comandos. Pode-se solicitar um tamanho de pacote maior. Porém, se a solicitação for negada, o sqlcmd usará o padrão de servidor para tamanho de pacote.

-c batch_terminator

Especifica o terminador de lote. Por padrão, você deve encerrar comandos e enviá-los para o SQL Server usando a palavra GO em uma linha por si só, seguido por Enter. Ao redefinir o terminador de lote, não use palavras-chave reservadas do Transact-SQL ou caracteres que tenham um significado especial para o sistema operacional, mesmo que elas sejam precedidas por uma barra invertida.

-L[c]

Aplica-se apenas a: Windows. Não há suporte para Linux e macOS.

Lista os computadores servidor localmente configurados e os nomes dos computadores servidor que estão transmitindo na rede. Você não pode usar esse parâmetro em combinação com outros parâmetros. O número máximo de computadores servidores que podem ser listados é 3.000. Se a lista de servidores estiver truncada devido ao tamanho do buffer, uma mensagem de aviso será exibida.

Note

Devido à natureza da difusão em redes, sqlcmd pode 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 você especificar o parâmetro c opcional, a saída será exibida sem a linha de cabeçalho Servers:, e cada linha do servidor será listada sem espaços à esquerda. Esta apresentação é conhecida como saída limpa. A saída limpa melhora o desempenho de processamento das linguagens de script.

-p[1]

Imprime estatísticas de desempenho para cada conjunto de resultados. A tela a seguir é um exemplo do formato das 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 de uma única transação.
  • t3 = Número médio de transações por segundo.

Todos os tempos estão em milissegundos.

Se você especificar o parâmetro 1opcional, 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 você especificar o parâmetro opcional como qualquer valor diferente de 1, um erro será gerado e o sqlcmd será encerrado.

-X[1]

Desabilita os comandos que podem comprometer a segurança do sistema quando o sqlcmd é executado em um arquivo em lotes. Os comandos desabilitados ainda são reconhecidos; o sqlcmd emite uma mensagem de aviso e continua. Se você especificar o parâmetro 1opcional, o sqlcmd gerará uma mensagem de erro e sairá. Os comandos a seguir são desabilitados quando for usada a opção -X:

  • ED
  • !! comando

Se você especificar a opção -X , ela impedirá que variáveis de ambiente sejam passadas para o sqlcmd. Isso evita também que o script de inicialização especificado usando a variável de script SQLCMDINI seja executado. Para obter mais informações sobre as variáveis de script do sqlcmd, confira sqlcmd – Usar o sqlcmd com variáveis de script.

-?

Exibe a versão do sqlcmd e um resumo da sintaxe das opções do sqlcmd .

Note

No macOS, execute sqlcmd '-?' (com aspas) em vez disso.

Remarks

Você não precisa usar opções na ordem mostrada na seção de sintaxe.

Note

Se você usar a opção -i seguida por um ou mais parâmetros extras, deverá usar um espaço entre o parâmetro e o valor. Esse requisito é um problema conhecido no sqlcmd (Go).

O sqlcmd imprime uma linha em branco entre vários conjuntos de resultados em um lote. Além disso, a <x> rows affected mensagem não aparece quando não se aplica à instrução em execução.

Para usar o 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 o sqlcmd sair após a execução.

O sistema operacional subjacente determina o comprimento total da linha de comando sqlcmd no ambiente de comando (por exemplo, cmd.exe ou bash), incluindo todos os argumentos e variáveis expandidas.

Suporte para DSN no sqlcmd e no bcp

Você pode especificar um DSN (nome da fonte de dados) em vez de um nome de servidor no sqlcmd ou bcp -S opção (ou sqlcmd :Connect comando) se especificar -D. Se você usar a opção -D , sqlcmd e bcp se conectarão ao servidor especificado no DSN pela opção -S .

Os DSNs do sistema são armazenados no odbc.ini arquivo no diretório ODBC SysConfigDir (/etc/odbc.ini em instalações padrão). Os DSNs de usuário são armazenados no arquivo .odbc.ini no diretório base do usuário (~/.odbc.ini).

Em sistemas Windows, os DSNs do Sistema e do Usuário são armazenados no registro e gerenciados por meio de odbcad32.exe. bcp e sqlcmd não dão suporte a DSNs de arquivo.

Para obter uma lista de entradas compatíveis com o driver, consulte DSN e palavras-chave e atributos da cadeia de conexão.

Em um DSN, somente a DRIVER entrada é necessária. Para se conectar a um servidor remoto, o 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 bcp tentará se conectar à 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 SQL Native Client 11 (sqlncli11.dll), enquanto o SQL Server 2019 (15.x) e versões posteriores exigem o driver do Microsoft ODBC Driver 17 para SQL Server (msodbcsql17.dll).

Se você especificar a mesma opção no DSN e na linha de comando sqlcmd ou bcp , a opção de linha de comando substituirá o valor usado no DSN. Por exemplo, se o DSN tiver uma DATABASE entrada e a linha de comando do sqlcmd incluir -d, o valor passado para -d será usado. Se você especificar Trusted_Connection=yes no DSN, a autenticação Kerberos será usada; o nome de usuário (-U) e a senha (-P), se fornecido, serão ignorados.

Você pode modificar scripts existentes que invocam isql para usar o sqlcmd definindo o seguinte alias: alias isql="sqlcmd -D".

Práticas recomendadas do sqlcmd

Use as seguintes práticas para ajudar a maximizar a segurança e a eficiência:

  • Use segurança integrada.

  • Use -X[1] em ambientes automatizados.

  • Proteja arquivos de entrada e de saída usando permissões adequadas de sistema de arquivos.

  • Para aumentar o desempenho, faça o máximo possível em uma sessão sqlcmd , em vez de usar uma série de sessões.

  • Defina valores de tempo limite para execução em lote ou consulta acima do tempo de execução esperado para o lote ou a consulta.

Use as seguintes práticas para ajudar a maximizar a exatidão:

  • Use o -V 16 para registrar quaisquer mensagens de nível de gravidade 16. As mensagens de severidade 16 indicam erros gerais que você pode corrigir.

  • Verifique o código de saída e DOS ERRORLEVEL a variável após a saída do processo. sqlcmd retorna 0 normalmente. Caso contrário, ele define a ERRORLEVEL configuração por -V. Em outras palavras, não espere ERRORLEVEL ser o mesmo valor que o número de erro relatado do SQL Server. O número de erro é um valor específico do SQL Server correspondente à função do sistema @@ERROR. ERRORLEVEL é um valor específico do sqlcmd para indicar por que o sqlcmd foi encerrado. Seu valor é influenciado pela especificação do -b parâmetro.

Usar o -V 16 em combinação com a verificação do código de saída e DOS ERRORLEVEL pode ajudar a detectar erros em ambientes automatizados, especialmente portões de qualidade antes de uma versão de produção.