Conectando com sqlcmd
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.
-c batch_terminator
Especificar o terminador de lote.
-C
Confiar no certificado do servidor.
-d database_name
Emitir uma instrução USE
database_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.
-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 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.
-h number_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.
-i input_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.
-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 -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.
-l timeout
Especifica o número de segundos antes que um logon no sqlcmd
expire quando você tenta se conectar a um servidor.
-m error_level
Controlar quais mensagens de erro são enviadas para stdout.
-M multisubnet_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)
-o output_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
-q commandline_query
Executa uma consulta quando sqlcmd
é iniciado, mas não encerra quando a consulta é concluída.
-Q commandline_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).
-s column_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.
-t query_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.
-V error_severity_level
Controlar o nível de severidade usado para definir a variável ERRORLEVEL.
-w column_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.
-y variable_length_type_display_width
Define a variável de script sqlcmd
SQLCMDMAXFIXEDTYPEWIDTH
.
-Y fixed_length_type_display_width
Define a variável de script sqlcmd
SQLCMDMAXVARTYPEWIDTH
.
-z password
Alterar senha.
-Z password
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"
.