Conectando com sqlcmd

Baixar driver ODBC

O utilitário sqlcmd está disponível com o Microsoft ODBC Driver for SQL Server no Linux e macOS.

Os seguintes comandos mostram como usar a Autenticação do Windows (Kerberos) e a Autenticação do SQL Server, respectivamente:

sqlcmd -E -Sxxx.xxx.xxx.xxx
sqlcmd -Sxxx.xxx.xxx.xxx -Uxxx -Pxxx

Opções disponíveis

As seguintes opções estão disponíveis em sqlcmd no Linux e macOS:

-?
Exibir o uso do sqlcmd.

-a
Solicitar um tamanho de pacote.

-b
Encerrar o trabalho em lotes caso haja um erro.

-cbatch_terminator
Especificar o terminador de lote.

-C
Confiar no certificado do servidor.

-ddatabase_name
Emitir uma instrução USEdatabase_name quando você iniciar o sqlcmd.

-D
Faz com que o valor passado para a opção -S do sqlcmd seja interpretada como um nome da fonte de dados (DSN). Para obter mais informações, confira "Suporte para DSN no sqlcmd e no bcp" no final deste artigo.

-e
Gravar scripts de entrada no dispositivo de saída padrão (stdout).

-E
Usar uma conexão confiável (autenticação integrada). Para obter mais informações sobre como estabelecer conexões confiáveis que usam autenticação integrada de um cliente Linux ou macOS, confira Usar a Autenticação Integrada.

-fcodepage | 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 do Linux instalada. (disponível desde 17.5.1.1)

-G
Essa opção é usada pelo cliente ao conectar com o Banco de Dados SQL do Azure, à Instância Gerenciada de SQL do Azure ou ao Azure Synapse Analytics para especificar que o usuário será autenticado com o Microsoft Entra ID (antigo Azure Active Directory). Ele pode ser combinado apenas com a opção -P para usar a autenticação do token de acesso (v17.8+). Essa opção define a variável de script SQLCMDUSEAAD do sqlcmd = true. A opção -G exige, no mínimo, a versão 17.6 do sqlcmd. Para determinar a versão, execute sqlcmd -?.

Importante

A opção -G só se aplica ao Banco de Dados SQL do Azure, à Instância Gerenciada de 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 o Microsoft ODBC Driver 17 for SQL Server versão 17.6.1 ou posterior e um ambiente Kerberos configurado corretamente.

-hnumber_of_rows
Especificar o número de linhas a serem impressas entre os títulos das colunas.

-H
Especificar um nome de estação de trabalho.

-iinput_file[,input_file[,...]]
Identificar o arquivo que contém um lote de instruções SQL ou procedimentos armazenados.

-I
Define a opção de conexão SET QUOTED_IDENTIFIER como ATIVADA.

-k
Remover ou substituir caracteres de controle.

-Kapplication_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 -K não for especificado, o sqlcmd não dará suporte à conectividade com uma réplica secundária em um grupo de disponibilidade Always On. Para saber mais, confira ODBC Driver no Linux e macOS - alta disponibilidade e recuperação de desastres.

Observação

Não há suporte para -K no CTP para SUSE Linux. No entanto, você pode especificar a palavra-chave ApplicationIntent=ReadOnly em um arquivo DSN passado para o sqlcmd. Para obter mais informações, confira "Suporte para DSN no sqlcmd e no bcp" no final deste artigo.

-ltimeout
Especifica o número de segundos antes que um logon no sqlcmd expire quando você tenta se conectar a um servidor.

-merror_level
Controlar quais mensagens de erro são enviadas para stdout.

-Mmultisubnet_failover
Sempre especifique -M ao se conectar ao ouvinte do grupo de disponibilidade de um grupo de disponibilidade do SQL Server 2012 (11.x) ou de uma Instância de Cluster de Failover do SQL Server 2012 (11.x). -M proporciona maior rapidez na detecção de failovers e conexão ao servidor ativo (no momento). Se -M não estiver especificado, -M estará desativado. Para saber mais sobre grupos de disponibilidade Always On, confira ODBC Driver no Linux e macOS – Alta disponibilidade e Recuperação de desastre.

Observação

Não há suporte para -M no CTP para SUSE Linux. No entanto, você pode especificar a palavra-chave MultiSubnetFailover=Yes em um arquivo DSN passado para o sqlcmd. Para obter mais informações, confira "Suporte para DSN no sqlcmd e no bcp" no final deste artigo.

-N[s|m|o]
Defina o modo de criptografia de conexão como Estrito, Obrigatório ou Opcional, respectivamente. O padrão será obrigatório se não for especificado. ([s|m|o] adicionado no sqlcmd 18.0)

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

-p
Imprimir as estatísticas de desempenho de cada conjunto de resultados.

-P
Especificar uma senha de usuário. Quando usado com a opção -G sem -U, 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. É importante garantir que o token de acesso seja um byte para byte correto, pois ele será enviado no estado em que se encontra. Confira abaixo um comando de exemplo que 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. Caso a codificação padrão do sistema ou do terminal não seja ASCII ou UTF-8, talvez seja necessário ajustar as opções iconv. 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

-qcommandline_query
Executa uma consulta quando sqlcmd é iniciado, mas não encerra quando a consulta é concluída.

-Qcommandline_query
Executa uma consulta quando o sqlcmd é iniciado. O sqlcmd será fechado quando a consulta for concluída.

-r
Redireciona as mensagens de erro para stderr.

-R
Faz o driver usar as configurações regionais do cliente para converter dados de moeda e data e hora em dados de caracteres. Atualmente usa apenas formatação em en_US (inglês dos EUA).

-scolumn_separator_char
Especificar o caractere separador de coluna.

-S [protocol:] server[,port]
Especificar o nome da instância de SQL Server à qual se conectar ou, se -D for usado, um DSN. O driver ODBC no Linux e no macOS requer -S. O único valor de protocolo válido é tcp.

-tquery_timeout
Especificar o número de segundos antes de um comando (ou instrução SQL) expirar.

-u
Especifica que output_file será armazenado em formato Unicode, qualquer que seja o formato de input_file.

-U
login_id Especifica uma ID de logon do usuário.

-Verror_severity_level
Controlar o nível de severidade usado para definir a variável ERRORLEVEL.

-wcolumn_width
Especificar a largura da tela para saída.

-W
Remover espaços à direita de uma coluna.

-x
Desabilitar substituição de variável.

-X
Desabilitar comandos, script de inicialização e variáveis de ambiente.

-yvariable_length_type_display_width
Define a variável de script sqlcmdSQLCMDMAXFIXEDTYPEWIDTH.

-Yfixed_length_type_display_width
Define a variável de script sqlcmdSQLCMDMAXVARTYPEWIDTH.

-zpassword
Alterar a senha.

-Zpassword
Alterar senha e sair.

Comandos disponíveis

Na versão atual, os seguintes comandos estão disponíveis:

  • [:]!!

  • :Connect

  • :Error

  • [:]EXIT

  • GO [count]

  • :Help

  • :List

  • :Listvar

  • :On Error

  • :Out

  • :Perftrace

  • [:]QUIT

  • :r

  • :RESET

  • :setvar

Opções não disponíveis

Na versão atual, as seguintes opções não estão disponíveis:

-A
Fazer logon no SQL Server com uma DAC (conexão de administrador dedicada). Para obter informações sobre como fazer uma DAC (conexão de administrador dedicada), veja as Diretrizes de programação.

-L
Listar os computadores servidores localmente configurados e os nomes dos computadores servidores que estão transmitindo na rede.

-v
Criar uma variável de script sqlcmd que pode ser usada em um script sqlcmd.

Você pode usar o seguinte método alternativo: Coloque os parâmetros dentro de um arquivo, que você poderá depois acrescentar a outro arquivo. Esse método ajudará você a usar um arquivo de parâmetro para substituir os valores. Por exemplo, crie um arquivo chamado a.sql (o arquivo de parâmetro) com o seguinte conteúdo:

:setvar ColumnName object_id
:setvar TableName sys.objects

Então crie um arquivo chamado b.sql com os parâmetros para substituição:

SELECT $(ColumnName) FROM $(TableName)

Na linha de comando, combine a.sql e b.sql em c.sql usando os seguintes comandos:

cat a.sql > c.sql

cat b.sql >> c.sql

Execute sqlcmd e use c.sql como arquivo de entrada:

sqlcmd -S<...> -P<..> -U<..> -I c.sql

Comandos não disponíveis

Na versão atual, os seguintes comandos não estão disponíveis:

  • :ED

  • :ServerList

  • :XML

Suporte para DSN no sqlcmd e no bcp

Você poderá especificar um DNS (nome da fonte de dados) em vez de um nome do servidor na opção sqlcmd ou bcp-S (ou no comando sqlcmd :Connect) se especificar -D. -D faz com que sqlcmd ou o bcp conecte-se ao servidor especificado no DSN pela opção -S.

Os DSNs de sistema são armazenados no arquivo odbc.ini no diretório SysConfigDir do ODBC (/etc/odbc.ini nas 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. O bcp e o sqlcmd não dão suporte a DSNs de arquivo.

Confira Atributos e palavras-chave de cadeia de conexão e DSN para ver a lista de entradas com suporte do driver.

Em um DSN, apenas a entrada DRIVER é necessária, mas para se conectar a um servidor remoto, sqlcmd ou bcp precisa de um valor no elemento SERVER. Se o elemento SERVER estiver vazio ou não estiver presente no DSN, sqlcmd e bcp tentarão se conectar à instância padrão no sistema local.

Ao usar o bcp em sistemas Windows, SQL Server 2017 (14.x) e anteriores exigem o driver SQL Native Client 11 (sqlncli11.dll), enquanto SQL Server 2019 (15.x) e posteriores exigem o Microsoft ODBC Driver 17 for SQL Server (msodbcsql17.dll).

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

Os scripts existentes que invocam isql podem ser modificados para usar sqlcmd com a definição do seguinte alias: alias isql="sqlcmd -D".

Confira também

Conectando com bcp
Notas de versão