Conexión con sqlcmd

Descargar controlador ODBC

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.

-cbatch_terminator
Especifica el terminador del lote.

-C
Confía en el certificado de servidor.

-ddatabase_name
Emita una instrucción USEnombre_de_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.

-fcodepage | 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.

-hnúmero_de_filas
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.

-iarchivo_de_entrada[,archivo_de_entrada[,...]]
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.

-Kapplication_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.

-ltimeout
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.

-merror_level
Controla qué mensajes de error se envían a stdout.

-Mconmutación_por_error_de_múltiples_subredes
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)

-ooutput_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

-qcommandline_query
Ejecuta una consulta cuando se inicia sqlcmd, pero no se cierra cuando finaliza la consulta.

-Qcommandline_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).

-scolumn_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.

-tquery_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.

-Verror_severity_level
Controla el nivel de gravedad que se usa para establecer la variable ERRORLEVEL.

-wcolumn_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.

-yvariable_length_type_display_width
Establece la variable de scripting SQLCMDMAXFIXEDTYPEWIDTH de sqlcmd.

-Yfixed_length_type_display_width
Establece la variable de scripting SQLCMDMAXVARTYPEWIDTH de sqlcmd.

-zpassword
Cambie la contraseña.

-Zpassword
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".

Consulte también

Conexión con bcp
Notas de la versión