Conexión con sqlcmd
La utilidad sqlcmd está disponible en Microsoft ODBC Driver for SQL Server en Linux y macOS.
Los siguientes comandos muestran cómo usar la autenticación de Windows (Kerberos) y la autenticación de SQL Server, respectivamente:
sqlcmd -E -Sxxx.xxx.xxx.xxx
sqlcmd -Sxxx.xxx.xxx.xxx -Uxxx -Pxxx
Opciones disponibles
Las siguientes opciones están disponibles en sqlcmd en Linux y macOS:
-?
mostrar el uso de sqlcmd
.
-a
Solicita un tamaño de paquete.
-b
Finalice el trabajo por lotes si se produce un error.
-c batch_terminator
Especifica el terminador del lote.
-C
Confía en el certificado de servidor.
-d database_name
Emita una instrucción USE
nombre de la base de datos cuando inicie sqlcmd
.
-D
Hace que el valor transmitido a la opción sqlcmd
-S se interprete como un nombre de origen de datos (DSN). Para obtener más información, vea la sección "Compatibilidad de DSN en sqlcmd
y bcp
" al final de este artículo.
-e
Crea scripts de entrada en el dispositivo de salida estándar (stdout).
-E
Usa la conexión de confianza (autenticación integrada). Para obtener más información sobre cómo establecer conexiones de confianza que usen la autenticación integrada desde un cliente Linux o macOS, consulte Uso de la autenticación integrada.
-f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage]
Especifica las páginas de códigos de entrada y de salida. El número de página de códigos es un valor numérico que especifica una página de códigos de Linux instalada. (disponible desde la versión 17.5.1.1)
-G
El cliente usa este modificador al conectarse a la base de datos de Azure SQL, Azure SQL Managed Instance o Azure Synapse Analytics para especificar que el usuario se autentica mediante la autenticación de Microsoft Entra ID (anteriormente llamado Azure Active Directory). Se puede combinar con la opción -P para usar la autenticación de token de acceso (versión 17.8 o posteriores). Esta opción establece la variable de scripting de sqlcmd SQLCMDUSEAAD en true. El modificador -G
requiere al menos sqlcmd versión 17.6. Para determinar su versión, ejecute sqlcmd -?
.
Importante
La opción -G solo es válida para la base de datos de Azure SQL, Azure SQL Managed Instance y Azure Synapse Analytics.
La autenticación interactiva de Microsoft Entra no se admite actualmente ni en Linux ni en macOS. La autenticación integrada de Microsoft Entra requiere la versión 17.6.1 o superior de Microsoft ODBC Driver 17 para SQL Server y un entorno de Kerberos configurado correctamente.
-h number_of_rows
Especifica el número de filas que se van a imprimir entre los encabezados de columna.
-H
Especifica el nombre de una estación de trabajo.
-i input_file[,input_file[,...]]
Identifica el archivo que contiene un lote de instrucciones SQL o procedimientos almacenados.
-I
Establece la opción de conexión SET QUOTED_IDENTIFIER
en ON (Activado).
-k
Quita o reemplaza caracteres de control.
-K application_intent
Declara el tipo de carga de trabajo de la aplicación al conectarse a un servidor. El único valor actualmente admitido es de solo lectura. Si no se especifica -K, la utilidad sqlcmd
no admitirá la conectividad con una réplica secundaria en un grupo de disponibilidad Always On. Para más información, vea Controlador ODBC en Linux y macOS: alta disponibilidad y recuperación ante desastres.
Nota
-K no se admite en la versión de CTP para SUSE Linux. Pero puede especificar la palabra clave ApplicationIntent=ReadOnly en un archivo de DSN transmitido a sqlcmd
. Para obtener más información, vea la sección "Compatibilidad de DSN en sqlcmd
y bcp
" al final de este artículo.
-l timeout
Especifica el número de segundos que tienen que transcurrir antes de que un inicio de sesión de sqlcmd
agote el tiempo de espera cuando se trate de conectar a un servidor.
-m error_level
Controla qué mensajes de error se envían a stdout.
-M multisubnet_failover
Especifique siempre -M al conectarse a una escucha de un grupo de disponibilidad de SQL Server 2012 (11.x) o a una instancia de clúster de conmutación por error de SQL Server 2012 (11.x). -M proporciona una detección más rápida de conmutaciones por error del servidor activo actualmente y de la conexión a este. Si no se especifica -M, -M se desactiva. Para más información sobre los grupos de disponibilidad AlwaysOn, consulte Controlador ODBC en Linux y macOS: alta disponibilidad y recuperación ante desastres.
Nota
-M no se admite en la versión de CTP para SUSE Linux. Pero puede especificar la palabra clave MultiSubnetFailover=Yes en un archivo de DSN transmitido a sqlcmd
. Para obtener más información, vea la sección "Compatibilidad de DSN en sqlcmd
y bcp
" al final de este artículo.
-N[s|m|o]
Establezca el modo de cifrado de la conexión en Strict, Mandatory u Optional (Estricto, Obligatorio u Opcional), respectivamente. El valor predeterminado es Obligatory (Obligatorio) si no se especifica. ([s|m|o]
agregado en sqlcmd 18.0)
-o output_file
Identifica el archivo que recibe los resultados de sqlcmd
.
-p
Imprime las estadísticas de rendimiento de cada conjunto de resultados.
-P
Especifica una contraseña de usuario. Cuando se usa con la opción -G sin -U, se especifica un archivo que contiene un token de acceso (versión 17.8 o posteriores). El archivo de token debe estar en formato UTF-16LE (sin BOM).
Los tokens de acceso se pueden obtener a través de varios métodos. Es importante asegurarse de que el token de acceso es correcto byte a byte, ya que se enviará tal y como está. A continuación se muestra un comando de ejemplo que obtiene un token de acceso. El comando usa los comandos de la CLI de Azure y Linux, y los guarda en un archivo con el formato adecuado. Si la codificación predeterminada del sistema o terminal no es ASCII o UTF-8, es posible que tenga que ajustar las opciones iconv
. Asegúrese de proteger cuidadosamente el archivo resultante y eliminarlo cuando ya no sea necesario.
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
Ejecuta una consulta cuando se inicia sqlcmd
, pero no se cierra cuando finaliza la consulta.
-Q commandline_query
Ejecuta una consulta cuando se inicia sqlcmd
. sqlcmd
se cerrará cuando finalice la consulta.
-r
Redirige los mensajes de error a stderr.
-R
Hace que el controlador use la configuración regional del cliente para convertir los datos de hora, fecha y moneda a datos de caracteres. Actualmente solo se utiliza el formato en_US (inglés de Estados Unidos).
-s column_separator_char
Especifica el carácter separador de columnas.
-S [protocol:] server[,port]
Especifique la instancia de SQL Server a la que se conectará, o si se usa-D, un DSN. El controlador ODBC en Linux y macOS requiere -S. tcp es el único protocolo válido.
-t query_timeout
Especifica el número de segundos que tienen que transcurrir antes de que un comando (o la instrucción de SQL) exceda el tiempo de espera.
-u
Especifica que el archivo output_file se almacene en formato Unicode, independientemente del formato del archivo input_file.
-U
login_id Especifica un identificador de inicio de sesión de usuario.
-V error_severity_level
Controla el nivel de gravedad que se usa para establecer la variable ERRORLEVEL.
-w column_width
Especifica el ancho de pantalla para el archivo de salida.
-W
Quita los espacios finales de una columna.
-x
Deshabilitar la sustitución de variables.
-X
Deshabilita los comandos interactivos, el script de inicio y las variables de entorno.
-y variable_length_type_display_width
Establece la variable de scripting SQLCMDMAXFIXEDTYPEWIDTH
de sqlcmd
.
-Y fixed_length_type_display_width
Establece la variable de scripting SQLCMDMAXVARTYPEWIDTH
de sqlcmd
.
-z password
Cambiar contraseña.
-Z password
Cambiar contraseña y salir.
Comandos disponibles
En la versión actual, están disponibles los siguientes comandos:
[:]!!
:Connect
:Error
[:]EXIT
GO [count]
:Help
:List
:Listvar
:On Error
:Out
:Perftrace
[:]QUIT
:r
:RESET
:setvar
Opciones no disponibles
En la versión actual, no están disponibles las siguientes opciones:
-A
Inicia sesión en SQL Server con una conexión de administrador dedicada (DAC). Para obtener información sobre cómo realizar una conexión de administrador dedicada (DAC), vea Instrucciones de programación.
-L
Enumera los equipos servidores configurados localmente y los nombres de los equipos servidores que se difunden en la red.
-v
Crea una variable de scripting de sqlcmd
que se puede usar en un script sqlcmd
.
Puede usar el siguiente método alternativo: Coloque los parámetros dentro de un archivo, que puede anexar a otro archivo. Este método lo ayudará a utilizar un archivo de parámetros para reemplazar los valores. Por ejemplo, cree un archivo llamado a.sql
(el archivo de parámetros) con el siguiente contenido:
:setvar ColumnName object_id
:setvar TableName sys.objects
Después, cree un archivo denominado b.sql
con los parámetros de reemplazo:
SELECT $(ColumnName) FROM $(TableName)
En la línea de comandos, combine a.sql
y b.sql
en c.sql
con los siguientes comandos:
cat a.sql > c.sql
cat b.sql >> c.sql
Ejecute sqlcmd
y use c.sql
como archivo de entrada:
sqlcmd -S<...> -P<..> -U<..> -I c.sql
Comandos no disponibles
En la versión actual, no están disponibles los siguientes comandos:
:ED
:ServerList
:XML
Compatibilidad con DSN en sqlcmd y bcp
Puede especificar un nombre de origen de datos (DSN) en lugar de un nombre de servidor en la opción sqlcmd o bcp -S
(o el comando sqlcmd :Connect) si especifica -D
. -D
hace que sqlcmd o bcp se conecten al servidor especificado en el DSN mediante la opción -S
.
Los DSN del sistema se almacenan en el archivo odbc.ini
que se encuentra en el directorio SysConfigDir de ODBC (/etc/odbc.ini
en instalaciones estándar). Los DSN de usuario se almacenan en .odbc.ini
en el directorio particular de un usuario (~/.odbc.ini
).
En los sistemas Windows, los DSN del sistema y del usuario se almacenan en el registro y se administran a través de odbcad32.exe. BCP y sqlcmd no admiten los DSN de archivo.
Consulte Atributos y palabras clave de cadena de conexión y DSN para obtener la lista de entradas que admite el controlador.
En un DSN, solo se necesita la entrada DRIVER, pero para conectarse a un servidor remoto, sqlcmd
o bcp
necesitan un valor del elemento SERVER. Si el elemento SERVER está vacío o no está presente en el DSN, sqlcmd
y bcp
intentarán conectarse a la instancia predeterminada en el sistema local.
Al usar BCP en sistemas Windows, SQL Server 2017 (14.x) y versiones anteriores necesitan el controlador SQL Native Client 11 (sqlncli11.dll), mientras que SQL Server 2019 (15.x) y versiones posteriores necesitan el controlador Microsoft ODBC 17 para el controlador de SQL Server (msodbcsql17.dll).
Si se especifica la misma opción en el DSN y la línea de comandos sqlcmd
o bcp
, la opción de línea de comandos invalida el valor utilizado en el DSN. Por ejemplo, si el DSN tiene una entrada DATABASE y la línea de comandos sqlcmd
incluye -d, se utiliza el valor transmitido a -d. Si se especifica Trusted_Connection=yes en el DSN, se utiliza la autenticación Kerberos, y el nombre de usuario ( –U) y la contraseña ( –P), si se proporcionan, se omiten.
Los scripts existentes que invocan a isql
pueden modificarse para usar sqlcmd
definiendo el siguiente alias: alias isql="sqlcmd -D"
.