Compartir a través de


utilidad sqlcmd

Aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistema de Plataforma de Analítica (PDW)Base de datos SQL en Microsoft Fabric

La utilidad sqlcmd permite escribir instrucciones Transact-SQL, procedimientos del sistema y archivos de script a través de varios modos:

  • En el símbolo del sistema.
  • En el modo SQLCMD del Editor de consultas.
  • En un archivo de script de Windows.
  • En un paso de trabajo del sistema operativo (cmd.exe) de un trabajo del Agente SQL Server.

Note

Aunque Microsoft Entra ID es el nuevo nombre de Azure Active Directory (Azure AD), para evitar interrumpir los entornos existentes, Azure AD sigue estando en algunos elementos codificados de forma rígida como campos de interfaz de usuario, proveedores de conexiones, códigos de error y cmdlets. En este artículo, los dos nombres son intercambiables.

variantes sqlcmd

Hay dos variantes de sqlcmd:

  • sqlcmd (Go): El go-mssqldb basado en , a veces con estilo go-sqlcmd. Esta versión es una herramienta independiente que puede descargar independientemente de SQL Server. Se ejecuta en Windows, macOS, Linux y en contenedores.

  • sqlcmd (ODBC): El sqlcmd basado en ODBC, alineado con la plataforma, disponible con SQL Server o las utilidades de línea de comandos de Microsoft, y parte del paquete en Linux. También se ejecuta en Windows, macOS, Linux y en contenedores.

Para averiguar qué variante y versión de sqlcmd está instalada en el sistema, consulte Comprobar la versión instalada de la utilidad sqlcmd.

Para obtener información sobre cómo obtener sqlcmd, vea Descargar e instalar la utilidad sqlcmd.

Compatibilidad con TDS 8.0

SQL Server 2025 (17.x) presenta compatibilidad con TDS 8.0 para la utilidad sqlcmd .

Syntax

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.

Para obtener información más detallada sobre la sintaxis y el uso de sqlcmd, consulte: Sintaxis de sqlcmd de ODBC.

Cambios importantes de sqlcmd

Varios modificadores y comportamientos se modifican en utilidad sqlcmd (Go). Para obtener la lista más actualizada de las marcas que faltan para la compatibilidad con versiones anteriores, visite la explicación de GitHub Priorización de la implementación de marcas back-compat.

  • En versiones anteriores de sqlcmd (Go), el modificador -P se quitó temporalmente y las contraseñas para la autenticación de SQL Server solo se podían proporcionar a través de estos mecanismos:

    • La variable de entorno SQLCMDPASSWORD.
    • El comando :CONNECT
    • Cuando se le solicite, el usuario podría escribir la contraseña para completar una conexión
  • -rrequiere un argumento 0 o 1

  • Se quitó el interruptor -R.

  • Se quitó el interruptor -I. Para deshabilitar el comportamiento del identificador entre comillas, agregue SET QUOTED IDENTIFIER OFF a los scripts.

  • -N toma un valor de cadena que puede ser true, false o disable para especificar la opción de cifrado. (default es lo mismo que omitir el parámetro).

    • Si no se proporcionan -N ni -C, sqlcmd negociará la autenticación con el servidor sin validar el certificado de servidor.
    • Si se proporciona -N pero -C no, sqlcmd requerirá la validación del certificado de servidor. Un valor false para el cifrado podría seguir provocando el cifrado del paquete de inicio de sesión.
    • Si se proporcionan -N y -C, sqlcmd usa sus valores para la negociación de cifrado.
    • Encontrará más información sobre la negociación de cifrado de cliente/servidor en MS-TDS PRELOGIN.

    Important

    En SQL Server 2025 (17.x), -N puede ser o (para optional), m (para mandatory, el valor predeterminado) o s (para strict). Si no incluye -N, -Nm (para mandatory) es el valor predeterminado. Se trata de un cambio importante de SQL Server 2022 (16.x) y versiones anteriores.

  • -u El archivo de salida Unicode generado tendrá escrita la marca de orden de bytes (BOM) UTF-16 Little-Endian.

  • Algunos comportamientos que se han conservado para mantener la compatibilidad con OSQL pueden cambiarse, como la alineación de encabezados de columna para algunos tipos de datos.

  • Todos los comandos deben caber en una línea, incluso EXIT. El modo interactivo no comprueba paréntesis ni comillas abiertas para los comandos, y no solicita líneas sucesivas. Este comportamiento es diferente a la versión de ODBC, lo que permite que la consulta que ejecute EXIT(query) abarque varias líneas.

Las conexiones de sqlcmd (Go) se limitan a las conexiones TCP. Las canalizaciones con nombre no se admiten en este momento en el controlador go-mssqldb.

Enhancements

  • :Connect ahora tiene un parámetro opcional -G para seleccionar uno de los métodos de autenticación para Azure SQL Database: SqlAuthentication, ActiveDirectoryDefault, ActiveDirectoryIntegrated, ActiveDirectoryServicePrincipal, ActiveDirectoryManagedIdentity y ActiveDirectoryPassword. Para obtener más información, consulte Autenticación con Microsoft Entra ID en sqlcmd. Si no se proporciona -G, se usa la seguridad integrada o la autenticación SQL Server, en función de la presencia de un parámetro de nombre de usuario -U.

  • El parámetro de línea de comandos --driver-logging-level le permite ver seguimientos desde el controlador go-mssqldb. Usa 64 para ver todos los rastros.

  • sqlcmd (Go) puede imprimir resultados usando un formato vertical. Use el modificador de línea de comandos -F vertical para establecerlo. La variable de scripting SQLCMDFORMAT también la controla.

    Note

    Esto es diferente al modificador -F de sqlcmd (ODBC), que se usa con -N para especificar el nombre de host en el certificado.

Opciones de la línea de comandos

En la tabla siguiente se enumeran las opciones de línea de comandos disponibles en sqlcmd y qué sistemas operativos admiten.

Opción de línea de comandos Compatible con Windows Compatible con Linux y macOS
Opciones relacionadas con el inicio de sesión
-A Yes No
-C Yes Yes
-d db_name Yes Yes
-D Yes Yes
-l login_timeout Yes Yes
-E Yes Yes
-g Yes Yes
-G Yes Yes
-H workstation_name Yes Yes
-j Yes Yes
-K application_intent Yes Yes
-M multisubnet_failover Yes Yes
-N[s|m|o] Yes Yes
-P password Yes Yes
-S [protocol:]server[\instance_name][,port] Yes Yes
-U login_id Yes Yes
-z new_password Yes Yes
-Z new_password Yes Yes
Opciones de entrada y salida
-f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage] Yes Yes
-F hostname_in_certificate 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
Opciones de ejecución de consultas
-e Yes Yes
-I Yes Yes
-q "consulta cmdline" Yes Yes
-Q "consulta de cmdline" Yes Yes
-t query_timeout Yes Yes
-v var = value [ var = value... ] Yes No
-x Yes Yes
Opciones de formato
Encabezados -h 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
Opciones de informes de errores
-b Yes Yes
-m error_level Yes Yes
-V error_severity_level Yes Yes
Opciones varias
-a tamaño_paquete Yes Yes
-c batch_terminator Yes Yes
-L[c] Yes No
-p[1] Yes Yes
-X[1] Yes Yes
-? Yes Yes

-A

Se aplica a: Solo Windows. No se admiten Linux ni macOS.

Inicia sesión en SQL Server con una conexión de administrador dedicada (DAC). Este tipo de conexión se utiliza para solucionar problemas de un servidor. Esta conexión solo funciona con equipos servidores que admitan DAC. Si DAC no está disponible, sqlcmd genera un mensaje de error y, después, se cierra. Para obtener más información sobre DAC, vea Conexión de diagnóstico para administradores de bases de datos. La opción -A no se admite con la opción -G. Al conectarse a Azure SQL Database mediante -A, debe ser administrador en el servidor SQL lógico. La DAC no está disponible para un administrador de Microsoft Entra.

Note

Para obtener información sobre cómo realizar una conexión de administrador dedicada (DAC) en macOS o Linux, vea Instrucciones de programación.

-C

Esta opción lo usa el cliente para configurarlo de forma que confíe implícitamente en el certificado de servidor sin validación. Esta opción es equivalente a la opción de ADO.NET TRUSTSERVERCERTIFICATE = true.

Para la utilidad sqlcmd (Go), también se aplican las condiciones siguientes:

  • Si no se proporcionan -N ni -C, sqlcmd negociará la autenticación con el servidor sin validar el certificado de servidor.
  • Si se proporciona -N pero -C no, sqlcmd requerirá la validación del certificado de servidor. Un valor false para el cifrado podría seguir provocando el cifrado del paquete de inicio de sesión.
  • Si se proporcionan -N y -C, sqlcmd usa sus valores para la negociación de cifrado.

-d db_name

Emite una instrucción USE <db_name> cuando se inicia sqlcmd. Esta opción establece la variable de scripting de sqlcmdSQLCMDDBNAME. Este parámetro especifica la base de datos inicial. El valor predeterminado es la propiedad de base de datos predeterminada del inicio de sesión. Si la base de datos no existe, se genera un mensaje de error y sqlcmd se cierra.

-D

Interpreta el nombre de servidor proporcionado a -S como un DSN en lugar de un nombre de host. Para obtener más información, consulte Compatibilidad con DSN en sqlcmd y bcp.

Note

La opción -D solo está disponible en clientes de Linux y macOS. En los clientes de Windows, hace referencia a una opción obsoleta que se ha quitado y se omite.

-l login_timeout

Especifica el número de segundos que tienen que transcurrir antes de que un inicio de sesión de sqlcmd en el controlador ODBC agote el tiempo de espera cuando se trate de conectar a un servidor. Esta opción establece la variable de scripting de sqlcmdSQLCMDLOGINTIMEOUT. El tiempo de espera predeterminado de inicio de sesión de sqlcmd es de ocho segundos. Cuando se usa la opción -G para conectarse a Azure SQL Database o a Azure Synapse Analytics y autenticarse con Microsoft Entra ID, se recomienda establecer un valor de tiempo de espera de al menos 30 segundos. El período de tiempo de espera de inicio de sesión debe ser un número comprendido entre 0 y 65534. Si el valor proporcionado no es numérico o no está dentro de ese rango, sqlcmd genera un mensaje de error. El valor 0 especifica que el tiempo de espera es infinito.

-E

Usa una conexión de confianza en lugar de usar un nombre de usuario y una contraseña para iniciar sesión en SQL Server. Si no se especifica -E , sqlcmd usa de forma predeterminada la opción de conexión de confianza.

La opción -E omite la posible configuración de la variable de entorno de nombre de usuario y contraseña, como SQLCMDPASSWORD. Si se usa la opción -E junto con la opción -U o laopción -P, se genera un mensaje de error.

Note

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

-g

Establece el valor de cifrado de columnas en Enabled. Para obtener más información, vea Always Encrypted. Solo se admiten claves maestras almacenadas en el almacén de certificados de Windows. La opción -g requiere al menos sqlcmd versión 13.1. Para determinar su versión, ejecute sqlcmd -?.

-G

El cliente usa esta opción al conectarse a Azure SQL Database o a Azure Synapse Analytics, para especificar que el usuario se autentica mediante la autenticación de Microsoft Entra. Esta opción establece la variable de scripting de sqlcmdSQLCMDUSEAAD = true. La opción -G requiere al menos sqlcmd versión 13.1. Para determinar su versión, ejecute sqlcmd -?. Para más información, consulte Autenticación de Microsoft Entra para Azure SQL. La opción -A no se admite con la opción -G.

La opción -G solo se aplica a Azure SQL Database y a 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 Descargar controlador ODBC para SQL Server y un entorno de Kerberos configurado correctamente.

Para obtener más información sobre la autenticación de Microsoft Entra, consulte Autenticación con Microsoft Entra ID en sqlcmd.

-H workstation_name

Un nombre de estación de trabajo. Esta opción establece la variable de scripting de sqlcmdSQLCMDWORKSTATION. El nombre de la estación de trabajo se muestra en la columna hostname de la vista de catálogo sys.sysprocesses y se puede devolver mediante el procedimiento almacenado sp_who. Si no se especifica esta opción, el nombre actual del equipo es el valor predeterminado. Este nombre se puede usar para identificar diferentes sesiones de sqlcmd .

-j

Imprime mensajes de error sin formato en la pantalla.

-K application_intent

Declara el tipo de carga de trabajo de la aplicación al conectarse a un servidor. El único valor admitido actualmente es ReadOnly. Si no se especifica -K, la utilidad sqlcmd no admitirá la conectividad con una réplica secundaria en un grupo de disponibilidad. Para obtener más información, consulte Descarga de cargas de trabajo de solo lectura a la réplica secundaria de un grupo de disponibilidad Always On.

Note

-K no se admite en SUSE Linux Enterprise Server (SLES). Pero puede especificar la palabra clave ApplicationIntent=ReadOnly en un archivo de DSN transmitido a sqlcmd. Para obtener más información, consulte Compatibilidad con DSN en sqlcmd y bcp más adelante en este artículo.

Para más información, vea Alta disponibilidad y recuperación ante desastres en Linux y macOS.

-M multisubnet_failover

-M Especifique siempre al conectarse al agente de escucha del grupo de disponibilidad de un grupo de disponibilidad de SQL Server o una instancia de clúster de conmutación por error de SQL Server. -M proporciona una detección más rápida del servidor activo (actualmente) y una conexión al mismo. Si no se especifica -M, -M se desactiva.

Para obtener más información, consulte:

Note

-M no se admite en SUSE Linux Enterprise Server (SLES). Pero puede especificar la palabra clave MultiSubnetFailover=Yes en un archivo de DSN transmitido a sqlcmd. Para obtener más información, consulte Compatibilidad con DSN en sqlcmd y bcp más adelante en este artículo.

Para más información, vea Alta disponibilidad y recuperación ante desastres en Linux y macOS.

-N[s|m|o]

Esta opción la utiliza el cliente para solicitar una conexión cifrada.

-N puede ser o (para optional), m (para mandatory, el valor predeterminado) o s (para strict). Si no incluye -N, -Nm (para mandatory) es el valor predeterminado. Se trata de un cambio importante de SQL Server 2022 (16.x) y versiones anteriores, donde -No es el valor predeterminado.

Para la utilidad sqlcmd (Go), -N toma un valor de cadena que puede ser uno de true, false o disable para especificar la opción de cifrado. (default es lo mismo que omitir el parámetro):

  • Si no se proporcionan -N ni -C, sqlcmd negociará la autenticación con el servidor sin validar el certificado de servidor.

  • Si se proporciona -N pero -C no, sqlcmd requerirá la validación del certificado de servidor. Un valor false para el cifrado podría seguir provocando el cifrado del paquete de inicio de sesión.

  • Si se proporcionan -N y -C, sqlcmd usa sus valores para la negociación de cifrado.

  • En sqlcmd (ODBC), use -F para especificar el nombre de host en el certificado. Por ejemplo:

    sqlcmd -S server01 -Q "SELECT TOP 100 * FROM WideWorldImporters.Sales.Orders" -A -Ns -F server01.adventure-works.com
    

    Note

    Esto es diferente al -F modificador de sqlcmd (Go), que se usa para imprimir resultados mediante un formato vertical.

-P password

Contraseña especificada por el usuario. En las contraseñas se distingue entre mayúsculas y minúsculas. Si se usa la opción -U, no se usa la opción -P y no se establece la variable de entorno SQLCMDPASSWORD, sqlcmd solicita al usuario una contraseña. No se recomienda usar la contraseña nula, pero puede especificarla usando un par de comillas dobles contiguas en el valor del parámetro ("").

Important

El uso de -P debe considerarse inseguro. No dé la contraseña en la línea de comandos. Como alternativa, use la variable de entorno SQLCMDPASSWORD o escriba la contraseña de forma interactiva omitiendo la opción -P.

Se recomienda usara una contraseña segura.

El mensaje de contraseña se muestra imprimiendo el mensaje de contraseña en la consola de la siguiente manera: Password:

La entrada del usuario queda oculta. Esto significa que no se muestra nada y que el cursor permanece en su posición.

La variable de entorno SQLCMDPASSWORD permite establecer una contraseña predeterminada para la sesión actual. Por lo tanto, las contraseñas no tienen que estar codificadas de forma rígida en los archivos por lotes. En el siguiente ejemplo primero se establece la variable SQLCMDPASSWORD en el símbolo del sistema y, después, se obtiene acceso a la utilidad sqlcmd.

Escriba el siguiente comando en el símbolo del sistema. Reemplace <password> por una contraseña válida.

SET SQLCMDPASSWORD=<password>
sqlcmd
SET SQLCMDPASSWORD=<password>
sqlcmd
SET SQLCMDPASSWORD=<password>
sqlcmd

Si la combinación de nombre de usuario y contraseña no es correcta, se genera un mensaje de error.

Note

La variable de entorno OSQLPASSWORD se mantiene por compatibilidad con versiones anteriores. La variable de entorno SQLCMDPASSWORD tiene prioridad sobre la variable de entorno OSQLPASSWORD. Esto significa que sqlcmd y osql se pueden usar una junto a la otra sin interferencias. Los scripts antiguos siguen funcionando.

Si se usa la opción -P junto con la opción -E, se genera un mensaje de error.

Si la opción -P va seguida de más de un argumento, se genera un mensaje de error y el programa se cierra.

Una contraseña que contiene caracteres especiales puede generar un mensaje de error. Debe evitar caracteres especiales al usar -Po usar la SQLCMDPASSWORD variable de entorno en su lugar.

En Linux y macOS, cuando se usa con la opción -G sin -U, -P 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. Debe asegurarse de que el token de acceso es correcto byte por byte, ya que se envía tal cual. 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 del terminal no es ASCII o UTF-8, es posible que tenga que ajustar las iconv opciones. 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

-S [protocol:]server[\instance_name][,port]

Especifica la instancia de SQL Server a la que hay que conectarse. Establece la variable de scripting de sqlcmdSQLCMDSERVER.

Especifique nombre_de_servidor para conectar con la instancia predeterminada de SQL Server en ese equipo servidor. Especifique nombre_de_servidor[\nombre_instancia] para conectar con una instancia con nombre de SQL Server en ese equipo servidor. Si no se especifica ningún equipo servidor, sqlcmd se conecta a la instancia predeterminada de SQL Server en el equipo local. Esta opción es necesaria si sqlcmd se ejecuta desde un equipo remoto conectado a la red.

protocolo puede ser tcp (TCP/IP), lpc (memoria compartida) o np (canalizaciones con nombre).

Si no especifica nombre_de_servidor[\nombre_de_instancia] al iniciar sqlcmd, SQL Server comprueba si existe la variable de entorno SQLCMDSERVER y la usa.

Note

La variable de entorno OSQLSERVER se mantiene por compatibilidad con versiones anteriores. La variable de entorno SQLCMDSERVER tiene prioridad sobre la variable de entorno OSQLSERVER. Esto significa que sqlcmd y osql se pueden usar una junto a la otra sin interferencias. Los scripts antiguos siguen funcionando.

El controlador ODBC en Linux y macOS requiere -S. El único valor de protocolo válido es tcp.

-U login_id

El nombre de inicio de sesión o el nombre de usuario contenido en la base de datos. Debe proporcionar la opción de nombre de base de datos para los usuarios de bases de datos contenidas (-d).

Note

La variable de entorno OSQLUSER se mantiene por compatibilidad con versiones anteriores. La variable de entorno SQLCMDUSER tiene prioridad sobre la variable de entorno OSQLUSER. Esto significa que sqlcmd y osql se pueden usar una junto a la otra sin interferencias. Los scripts antiguos siguen funcionando.

Si no se especifica la opción -U o la opción -P, sqlcmd intenta conectarse mediante el modo de autenticación de Microsoft Windows. La autenticación se basa en la cuenta de Windows del usuario que está ejecutando sqlcmd.

Si se usa la opción -U junto con la opción -E (descrita más adelante en este artículo), se genera un mensaje de error. Si la opción -U va seguida de más de un argumento, se genera un mensaje de error y el programa se cierra.

-z new_password

Cambie la contraseña. Reemplace <oldpassword> por la contraseña anterior y <newpassword> por la nueva contraseña.

sqlcmd -U someuser -P <oldpassword> -z <newpassword>
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
sqlcmd -U someuser -P <oldpassword> -z <newpassword>

-Z new_password

Cambie la contraseña y salga. Reemplace <oldpassword> por la contraseña anterior y <newpassword> por la nueva contraseña.

sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>

Opciones de entrada y salida

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

Reglas de conversión de páginas de códigos:

  • Si no se especifica ninguna página de códigos, sqlcmd usa la página de códigos actual para los archivos de entrada y salida, a menos que el archivo de entrada sea un archivo Unicode, en cuyo caso no es necesaria la conversión.

  • sqlcmd reconoce automáticamente los archivos de entrada Unicode "big endian" y "little endian". Si se especifica la opción -u, la salida siempre es little-endian Unicode.

  • Si no se especifica ningún archivo de salida, la página de códigos de salida es la página de códigos de la consola. Este enfoque permite que la salida se muestre correctamente en la consola.

  • Si hay varios archivos de entrada, se considera que pertenecen a la misma página de códigos. Los archivos de entrada Unicode y no Unicode pueden ser mixtos.

Escriba chcp en el símbolo del sistema para comprobar la página de códigos de cmd.exe.

Note

En Linux, 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).

-F hostname_in_certificate

Especifica un nombre común (CN) o nombre alternativo del sujeto (SAN) diferente y esperado en el certificado del servidor que se va a usar durante la validación del certificado del servidor. Sin esta opción, la validación de certificados garantiza que el Nombre Común (CN) o Nombre Alternativo del Sujeto (SAN) del certificado coincida con el nombre del servidor al que te conectas. Este parámetro se puede rellenar cuando el nombre del servidor no coincide con el CN o SAN, por ejemplo, cuando se usan alias DNS.

-i input_file[,input_file2...]

Identifica el archivo que contiene un lote de instrucciones Transact-SQL o procedimientos almacenados. Es posible que se especifiquen varios archivos que se lean y procesen en orden. No use ningún espacio entre los nombres de archivo. sqlcmd comprueba primero si todos los archivos especificados existen. Si uno o más archivos no existen, sqlcmd se cerrará. Las opciones -i y -Q/-q son mutuamente excluyentes.

Note

Si usa la -i opción seguida de uno o varios parámetros adicionales, debe usar un espacio entre el parámetro y el valor. Se trata de un problema conocido en sqlcmd (Go).

Ejemplos de rutas de acceso:

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

Las rutas de acceso a archivos que contengan espacios deben escribirse entre comillas.

Esta opción se puede usar más de una vez:

sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>

-o archivo_salida

Identifica el archivo que recibe la salida de sqlcmd.

Si se especifica -u , archivo_de_salida se almacena en formato Unicode. Si el nombre de archivo no es válido, se genera un mensaje de error y sqlcmd se cierra. sqlcmd no admite la escritura simultánea de varios procesos de sqlcmd en el mismo archivo. El archivo de salida está dañado o es incorrecto. La opción -f también es relevante para los formatos de archivo. Este archivo se creará si no existe. Se sobrescribirá cualquier archivo con el mismo nombre que pertenezca a una sesión de sqlcmd anterior. El archivo que se especifica aquí no es el archivo stdout. Si se especifica un archivo stdout, este archivo no se usa.

Ejemplos de rutas de acceso:

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

Las rutas de acceso a archivos que contengan espacios deben escribirse entre comillas.

-r[0 | 1]

Redirige la salida del mensaje de error a la pantalla (stderr). Si no especifica ningún parámetro o si especifica 0, solo se redirigirán los mensajes de error con un nivel de gravedad 11 o superior. Si especifica 1, toda la salida de mensajes de error, incluida PRINT, se redirigirá. Esta opción no tiene ningún efecto si usa -o. De forma predeterminada, los mensajes se envían a stdout.

Note

Para la utilidad sqlcmd (Go), -r requiere un argumento 0 o 1.

-R

Se aplica solo a:sqlcmd ODBC.

Hace que sqlcmd localice las columnas numéricas, de moneda, fecha y hora recuperadas de SQL Server según la configuración regional del cliente. De forma predeterminada, estas columnas se muestran con la configuración regional del servidor.

Note

En Linux y macOS, -R actualmente solo usa el formato (inglés de EE. UU.) en_US.

-u

Especifica que archivo_de_salida se almacena en formato Unicode, independientemente del formato de archivo_de_entrada.

Note

Para la utilidad sqlcmd (Go), el archivo de salida Unicode generado tiene escrita la marca de orden de bytes Little-Endian (BOM) UTF-16.

Opciones de ejecución de consultas

-e

Escribe scripts de entrada en el dispositivo de salida estándar (stdout).

-I

Se aplica solo a:sqlcmd ODBC.

Establece la opción de conexión de SET QUOTED_IDENTIFIER en ON. El valor predeterminado es OFF. Para más información, consulte SET QUOTED_IDENTIFIER.

Note

Para deshabilitar el comportamiento del identificador entre comillas en la utilidad sqlcmd (Go), agregue SET QUOTED IDENTIFIER OFF a los scripts.

-q "consulta de línea de comandos"

Ejecuta una consulta cuando sqlcmd se inicia, pero no cierra sqlcmd cuando la consulta finaliza. Se pueden ejecutar varias consultas delimitadas por punto y coma. Utilice las comillas alrededor de la consulta, como se muestra en el siguiente ejemplo.

En el símbolo del sistema, escriba:

sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"

Important

No use el terminador GO en la consulta.

Si se especifica -b junto con esta opción, sqlcmd se cierra en caso de error. -b se describe en algún lugar de este artículo.

-Q "consulta de línea de comandos"

Ejecuta una consulta cuando se inicia sqlcmd e inmediatamente después cierra sqlcmd. Se pueden ejecutar varias consultas delimitadas por punto y coma.

Utilice las comillas alrededor de la consulta, como se muestra en el siguiente ejemplo.

En el símbolo del sistema, escriba:

sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"

Important

No use el terminador GO en la consulta.

Si se especifica -b junto con esta opción, sqlcmd se cierra en caso de error. -b se describe en algún lugar de este artículo.

-t query_timeout

Especifica el número de segundos que tienen que transcurrir antes de que un comando (o la instrucción de Transact-SQL) exceda el tiempo de espera. Esta opción establece la variable de scripting de sqlcmdSQLCMDSTATTIMEOUT. Si no se especifica un valor de query_timeout, el comando no agota el tiempo de espera. El query_timeout debe ser un número entre 1 y 65534. Si el valor proporcionado no es numérico o no está dentro de ese rango, sqlcmd genera un mensaje de error.

Note

El valor de tiempo de espera real puede variar del valor especificado de query_timeout por varios segundos.

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

Se aplica a: Solo Windows. No se admiten Linux ni macOS.

Crea una variable de scripting de sqlcmd que puede usarse en un script de sqlcmd.

Si el valor contiene espacios en blanco, especifíquelo entre comillas. Se pueden especificar varios valores <var>="<value>". Si hay errores en alguno de los valores especificados, sqlcmd genera un mensaje de error y después se cierra.

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

Hace que sqlcmd omita las variables de scripting. Este parámetro es útil cuando un script contiene muchas instrucciones INSERT que pueden contener cadenas que tengan el mismo formato que las variables normales, como $(<variable_name>).

Opciones de formato

Encabezados -h

Especifica el número de filas que se van a imprimir entre los encabezados de las columnas. La opción predeterminada es imprimir los encabezados una vez para cada conjunto de resultados de la consulta. Esta opción establece la variable de scripting de sqlcmdSQLCMDHEADERS. Use -1 para especificar que no se impriman los encabezados. Cualquier valor no válido hará que sqlcmd genere un mensaje de error y se cierre.

-k [1 | 2]

Quita todos los caracteres de control, como tabulaciones y nuevos caracteres de línea de la salida. Este parámetro conserva el formato de las columnas cuando se devuelven datos.

  • -k quita los caracteres de control.
  • -k1 reemplaza cada carácter de control por un espacio.
  • -k2 reemplaza los caracteres de control consecutivos por un solo espacio.

-s col_separator

Especifica el carácter separador de columnas. El valor predeterminado es un espacio en blanco. Esta opción establece la variable de scripting de sqlcmdSQLCMDCOLSEP. Para usar caracteres que tienen un significado especial para el sistema operativo, como la y comercial (&) o el punto y coma (;), incluya el carácter entre comillas ("). El separador de columnas puede ser cualquier carácter de 8 bits.

-w screen_width

Especifica el ancho de pantalla para la salida. Esta opción establece la variable de scripting de sqlcmdSQLCMDCOLWIDTH. El ancho de columna debe ser un número mayor que 8 y menor que 65536. Si el ancho de columna especificado no está en ese intervalo, sqlcmd generará un mensaje de error. El ancho predeterminado es 80 caracteres. Cuando una línea de salida supera el ancho de columna especificado, se pasa a la siguiente línea.

-W

Esta opción quita los espacios finales de una columna. Use esta opción junto con la opción -s cuando prepare datos que se vayan a exportar a otra aplicación. No se puede usar con las opciones -y o -Y.

-y variable_length_type_display_width

Establece la variable de scripting de sqlcmdSQLCMDMAXVARTYPEWIDTH. El valor predeterminado es 256. Limita el número de caracteres que se devuelve para tipos de datos de longitud variable y gran tamaño:

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • xml
  • tipos de datos definidos por el usuario (UDT)
  • text
  • ntext
  • image

Los UDT pueden ser de longitud fija, en función de la implementación. Si esta longitud de un UDT de longitud fija es más corta que anchura_de_visualización, el valor del UDT devuelto no se ve afectado. No obstante, si la longitud es mayor que anchura_de_visualización, la salida queda truncada.

Caution

Use la opción -y 0 con mucha precaución, ya que puede causar graves problemas de rendimiento en el servidor y en la red, según el tamaño de los datos devueltos.

-Y fixed_length_type_display_width

Establece la variable de scripting de sqlcmdSQLCMDMAXFIXEDTYPEWIDTH. El valor predeterminado es 0 (ilimitado). Limita el número de caracteres que se devuelve para los siguientes tipos de datos:

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

Opciones de informes de errores

-b

Especifica que sqlcmd se cierre y devuelva un valor de DOS ERRORLEVEL cuando se produce un error. El valor que se devuelve a la variable ERRORLEVEL es 1 cuando el mensaje de error de SQL Server tiene un nivel de gravedad superior a 10; de lo contrario, el valor devuelto es 0. Si se ha establecido la opción -V además de -b, sqlcmd no notifica un error si el nivel de gravedad es inferior a los valores establecidos mediante -V. Los archivos por lotes del símbolo del sistema pueden probar el valor de ERRORLEVEL y controlar el error apropiadamente. sqlcmd no notifica los mensajes de error con un nivel de gravedad de 10 (mensajes informativos).

Si el script de sqlcmd contiene un comentario incorrecto, un error de sintaxis o carece de una variable de scripting, el valor de ERRORLEVEL devuelto es 1.

-m error_level

Controla qué mensajes de error se envían a stdout. Se envían los mensajes que tienen un nivel de gravedad mayor o igual que este nivel. Cuando este valor se establece en -1, se envían todos los mensajes, incluidos los informativos. No se permiten espacios entre -m y -1. Por ejemplo, -m-1 es válido, pero -m -1 no lo es.

Esta opción también establece la variable de scripting de sqlcmdSQLCMDERRORLEVEL. El valor predeterminado de esta variable es 0.

-V error_severity_level

Controla el nivel de gravedad que se usa para establecer la variable ERRORLEVEL. Los mensajes de error que tienen niveles de gravedad mayores o iguales que este valor establecen ERRORLEVEL. Los valores menores que 0 se notifican como 0. Los archivos CMD y por lotes se pueden usar para probar el valor de la variable ERRORLEVEL.

Otras opciones

-a packet_size

Solicita un paquete de un tamaño diferente. Esta opción establece la variable de scripting de sqlcmdSQLCMDPACKETSIZE. tamaño_paquete debe ser un valor entre 512 y 32767. El valor predeterminado es 4096. Un tamaño de paquete mayor puede mejorar el rendimiento de la ejecución de scripts que comprenden gran cantidad de instrucciones de Transact-SQL entre los comandos GO. Puede solicitar un tamaño de paquete mayor. No obstante, si se deniega la solicitud, sqlcmd usa el valor predeterminado de servidor para el tamaño de paquete.

-c batch_terminator

Especifica el terminador del lote. De forma predeterminada, los comandos se terminan y se envían a SQL Server escribiendo la palabra GO en una línea aparte. Cuando restablezca el terminador del lote, no use palabras claves reservadas de Transact-SQL ni caracteres que tengan un significado especial para el sistema operativo, incluso aunque vayan precedidos de una barra diagonal invertida.

-L[c]

Se aplica a: Solo Windows. No se admiten Linux ni macOS.

Enumera los equipos servidores configurados localmente y los nombres de los equipos servidores que difunden en la red. Este parámetro no se puede usar en combinación con otros parámetros. El número máximo de equipos de servidor que se puede enumerar es 3000. Si la lista de servidor se trunca debido al tamaño del búfer, aparece un mensaje de advertencia.

Note

Debido a la naturaleza de la difusión en redes, es posible que sqlcmd no reciba una respuesta oportuna de todos los servidores. Por lo tanto, la lista de servidores devuelta puede variar en cada invocación de esta opción.

Si se especifica el parámetro opcional c, la salida aparece sin la línea de encabezado Servers: y cada línea de servidor se muestra sin espacios iniciales. Esta presentación se conoce como salida limpia. La salida limpia mejora el rendimiento del procesamiento de los lenguajes de scripting.

-p[1]

Imprime estadísticas de rendimiento para cada conjunto de resultados. La siguiente pantalla muestra un ejemplo del formato para las estadísticas de rendimiento:

Network packet size (bytes): n

x xact[s]:

Clock Time (ms.): total       t1  avg       t2 (t3 xacts per sec.)

Where:

  • x = número de transacciones que procesa SQL Server.
  • t1 indica el tiempo total de todas las transacciones.
  • t2 = tiempo medio de una única transacción.
  • t3 = número medio de transacciones por segundo.

Todos los tiempos se indican en milisegundos.

Si se especifica el parámetro opcional 1 , el formato de salida de las estadísticas es el separado por dos puntos, que se puede importar fácilmente en una hoja de cálculo o se puede procesar en un script.

Si el parámetro opcional tiene cualquier valor distinto de 1, se genera un error y sqlcmd se cierra.

-X[1]

Deshabilita los comandos que pueden poner en peligro la seguridad del sistema cuando se ejecuta sqlcmd desde un archivo por lotes. Los comandos deshabilitados se siguen reconociendo; sqlcmd emite un mensaje de advertencia y sigue ejecutándose. Si se especifica el parámetro opcional 1 , sqlcmd genera un mensaje de error y después se cierra. Los siguientes comandos se deshabilitan cuando se usa la opción -X:

  • ED
  • !! mandar

Si se especifica la opción -X, se evita que se pasen variables de entorno a sqlcmd. También impide que el script de inicio especificada mediante la variable de scripting SQLCMDINI se ejecute. Para obtener más información sobre las variables de script de sqlcmd, consulte sqlcmd - Usar con variables de script.

-?

Muestra la versión de sqlcmd y un resumen de la sintaxis de las opciones de sqlcmd .

Note

En macOS, ejecute sqlcmd '-?' (con comillas) en su lugar.

Remarks

Las opciones no tienen que utilizarse forzosamente en el orden mostrado en la sección de sintaxis.

Note

Si usa la -i opción seguida de uno o varios parámetros adicionales, debe usar un espacio entre el parámetro y el valor. Se trata de un problema conocido en sqlcmd (Go).

Cuando se devuelven varios resultados, sqlcmd imprime una línea en blanco entre cada conjunto de resultados de un lote. Además, el mensaje <x> rows affected no aparece cuando no se aplica a la instrucción ejecutada.

Para usar sqlcmd de forma interactiva, escriba sqlcmd en el símbolo del sistema con cualquiera o varias de las opciones descritas anteriormente en este artículo. Para más información, vea Uso de sqlcmd.

Note

Las opciones -l, -Q, -Z o -i hacen que sqlcmd se cierre después de la ejecución.

La longitud total de la línea de comandos de sqlcmd en el entorno de comandos (por ejemplo cmd.exe o bash), incluidos todos los argumentos y las variables expandidas, es la que determina el sistema operativo subyacente.

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 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 usa la autenticación Kerberos; se omiten el nombre de usuario (-U) y la contraseña (-P), si se proporcionan.

Los scripts existentes que invocan a isql pueden modificarse para usar sqlcmd definiendo el siguiente alias: alias isql="sqlcmd -D".

Prácticas recomendadas para sqlcmd

Use las siguientes prácticas para maximizar la seguridad y la eficacia.

  • Use seguridad integrada.

  • Use -X[1] en los entornos automatizados.

  • Proteja los archivos de entrada y salida mediante los permisos del sistema de archivos adecuados.

  • Para aumentar el rendimiento, haga tanto como pueda en una sola sesión de sqlcmd en vez de emplear varias.

  • Establezca valores de tiempo de espera para la ejecución de lotes y consultas superiores a los que prevea para la ejecución de cada lote o consulta.

Use los procedimientos siguientes para ayudar a maximizar la exactitud:

  • Use -V 16 para registrar los mensajes con una gravedad de nivel 16. Los mensajes de gravedad 16 indican errores generales que el usuario puede corregir.

  • Compruebe el código de salida y la variable DOS ERRORLEVEL después de que se cierre el proceso. sqlcmd devuelve 0 normalmente, de lo contrario, establece ERRORLEVEL como se ha configurado en -V. En otras palabras, no cabe esperar que ERRORLEVEL tenga el mismo valor que el número de error que se ha comunicado desde SQL Server. El número de error es un valor específico de SQL Server correspondiente a la función del sistema @@ERROR. ERRORLEVEL es un valor específico de sqlcmd que indica por qué sqlcmd ha finalizado y la especificación del argumento de la línea de comandos -b influye en su valor.

El uso de -V 16 en combinación con la comprobación del código de salida y DOS ERRORLEVEL puede ayudar a detectar errores en entornos automatizados, especialmente en las pruebas de calidad antes de una versión de producción.