Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Aplica a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistema de Plataforma de Analítica (PDW)
Base de datos SQL en Microsoft Fabric
La utilidad sqlcmd acepta instrucciones Transact-SQL, procedimientos del sistema y archivos de script.
Note
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.
Además de Transact-SQL instrucciones dentro de sqlcmd, use los siguientes comandos:
GO [ <count> ]:List[:]RESET:Error-
[:]ED1 :Out[:]!!:Perftrace[:]QUIT:Connect[:]EXIT:On Error:r:Help-
:ServerList1 -
:XML [ ON | OFF ]1 :Setvar:Listvar
1 No compatible con Linux o macOS.
Tenga en cuenta los siguientes puntos al usar comandos sqlcmd :
Todos los comandos sqlcmd , excepto
GO, deben comenzar con dos puntos (:).Important
Para mantener la compatibilidad con versiones anteriores de los scripts existentes osql, algunos comandos funcionan sin dos puntos, como se señala mediante
[:].sqlcmd reconoce comandos solo si aparecen al principio de una línea.
Los comandos de sqlcmd no distinguen entre mayúsculas y minúsculas.
Cada comando debe estar en una línea separada. No puede seguir un comando con una instrucción Transact-SQL u otro comando.
Los comandos se ejecutan inmediatamente. No se colocan en el búfer de ejecución, como es el caso de las instrucciones Transact-SQL.
Comandos de edición
[:]ED
Inicia el editor de texto. Use este editor para editar el lote de Transact-SQL actual o el último lote de ejecución. Para editar el último lote de ejecución, escriba el ED comando inmediatamente después de que finalice la ejecución del último lote.
La SQLCMDEDITOR variable de entorno define el editor de texto. El editor predeterminado es Edit. Para cambiar el editor, establezca la variable de entorno SQLCMDEDITOR. Por ejemplo, para establecer el editor en el Bloc de notas de Microsoft, escriba el siguiente comando:
SET SQLCMDEDITOR=notepad
[:]RESET
Borra la caché de instrucciones.
:List
Imprime el contenido de la caché de sentencias.
Variables
:Setvar <var> [ "value" ]
Define las variables de scripting de sqlcmd. Las variables de scripting tienen el siguiente formato: $(VARNAME).
Los nombres de variables no distinguen entre mayúsculas y minúsculas.
Las variables de scripting pueden establecerse de los siguientes modos:
- Implícitamente utilizando una opción de línea de comandos. Por ejemplo, la opción
-lestablece la variable deSQLCMDLOGINTIMEOUTsqlcmd. - Explícitamente mediante el comando
:Setvar. - Definir una variable de entorno antes de ejecutar sqlcmd.
Note
La opción -X impide que las variables de entorno se pasen a sqlcmd.
Si una variable definida mediante :Setvar y una variable de entorno tienen el mismo nombre, la variable definida mediante :Setvar tiene prioridad.
Los nombres de variables no deben contener caracteres de espacio en blanco.
Los nombres de variable no pueden tener el mismo formato que una expresión variable como $(var).
Si el valor de la cadena de la variable de script contiene espacios en blanco, incluya el valor entre comillas. Si un valor para la variable del script no se especifica, la variable de script se elimina.
:Listvar
Muestra una lista de variables de scripting que están establecidas actualmente.
Note
Solo se muestran las variables de scripting establecidas mediante sqlcmd y las variables establecidas con el comando :Setvar.
Comandos de salida
:Error <nombre de archivo> | STDERR | STDOUT
Redirigir toda la salida de error al archivo especificado por nombre de archivo, a stderr o a stdout. El comando :Error puede aparecer varias veces en un script. De forma predeterminada, la salida de error va a stderr.
filename
Crea y abre un archivo que recibirá la salida. Un archivo existente se trunca en cero bytes. Si el archivo no está disponible debido a permisos u otros motivos, la salida no se cambia y el último destino especificado o predeterminado recibe la salida de error.
STDERR
Cambia la salida de error a la secuencia de
stderr. Si se redirige la salida, el destino al que se redirige la secuencia recibe la salida de error.STDOUT
Cambia la salida de error a la secuencia de
stdout. Si se redirige la salida, el destino al que se redirige la secuencia recibe la salida de error.
:Out <nombreDeArchivo> | STDERR | STDOUT
Crea y redirige todos los resultados de la consulta al archivo especificado por nombre de archivo, a stderro a .stdout De forma predeterminada, la salida va a stdout. Si el archivo ya existe, se trunca en cero bytes. El comando :Out puede aparecer varias veces en un script.
:Perftrace <nombreDeArchivo> | STDERR | STDOUT
Crea y redirige toda la información de seguimiento de rendimiento al archivo especificado por nombre de archivo, a stderro a .stdout De forma predeterminada, la salida del seguimiento de rendimiento va a stdout. Un archivo existente se trunca en cero bytes. El comando :Perftrace puede aparecer varias veces en un script.
Comandos de control de ejecución
:Al producirse un error [ salir | ignorar ]
Establece la acción que se va a realizar cuando se produce un error durante la ejecución por lotes o script.
Cuando se usa la exit opción , sqlcmd sale con el valor de error adecuado.
Cuando se usa la ignore opción , sqlcmd omite el error y continúa ejecutando el lote o el script. De forma predeterminada, sqlcmd imprime un mensaje de error.
[:]QUIT
Hace que sqlcmd se cierre.
[:]EXIT [ ( instrucción ) ]
Use el resultado de una SELECT instrucción como valor devuelto de sqlcmd. Si es numérica, la primera columna de la última fila del resultado se convierte en un entero de 4 bytes (long). MS-DOS, Linux y macOS pasan el byte inferior al proceso primario o al nivel de errores del sistema operativo. Windows 2000 y versiones posteriores pasan el entero completo de 4 bytes. La sintaxis es :EXIT(query).
Por ejemplo:
:EXIT(SELECT @@ROWCOUNT)
También se puede incluir el parámetro :EXIT como parte de un archivo por lotes. Por ejemplo, en el símbolo del sistema, escriba:
sqlcmd -Q ":EXIT(SELECT COUNT(*) FROM '%1')"
La utilidad sqlcmd envía todo lo que está entre paréntesis (()) al servidor. Si un procedimiento almacenado del sistema selecciona un conjunto y devuelve un valor, solo se devuelve la selección. La instrucción :EXIT() con paréntesis vacíos ejecuta todo antes en el lote y, a continuación, sale sin devolver un valor.
Cuando se especifica una consulta incorrecta, sqlcmd sale sin un valor devuelto.
Aquí tienes una lista de formatos EXIT:
:EXITNo ejecuta el lote y, a continuación, se cierra inmediatamente y no devuelve ningún valor.
:EXIT( )Ejecuta el lote y, a continuación, se cierra y no devuelve ningún valor.
:EXIT(query)Ejecuta el lote que incluye la consulta y, a continuación, se cierra después de devolver los resultados de la consulta.
Si usa RAISERROR dentro de un script sqlcmd y genera un estado de 127, sqlcmd se cierra y devuelve el identificador de mensaje al cliente. Por ejemplo:
RAISERROR(50001, 10, 127)
Este error hará que el script de sqlcmd finalice y devuelva el identificador de mensaje 50001 al cliente.
SQL Server reserva los valores devueltos de -1 a -99, y sqlcmd define valores devueltos adicionales:
| Valor devuelto | Description |
|---|---|
-100 |
Error encontrado antes de seleccionar el valor devuelto. |
-101 |
No se encontró ninguna fila al seleccionar el valor devuelto. |
-102 |
Error de conversión al seleccionar el valor devuelto. |
GO [count]
GO marca tanto el final de un lote como la ejecución de cualquier instrucción de Transact-SQL almacenada en caché. El lote se ejecuta varias veces como lotes independientes. No se puede declarar una variable más de una vez en un único lote.
Comandos varios
:r <nombre de archivo>
Analiza instrucciones de Transact-SQL adicionales y comandos sqlcmd del archivo especificado por nombre de archivo en la memoria caché de instrucciones. sqlcmd lee el nombre de archivo en relación con el directorio de inicio.
Si el archivo contiene instrucciones Transact-SQL que no van seguidas de GO, debe escribir GO en la línea que sigue a :r.
sqlcmd lee y ejecuta el archivo después de encontrar un terminador por lotes. Puede emitir varios comandos :r. El archivo puede incluir cualquier comando sqlcmd , incluido el terminador por lotes GO.
Note
El recuento de líneas que se muestra en modo interactivo aumenta en uno para cada :r comando encontrado. El comando :r aparece en la salida del comando list.
:ServerList
Enumera los servidores configurados localmente y los nombres de los servidores que difunden en la red.
:Connect server_name[\instance_name] [-l timeout] [-U user_name [-P password]] [-N[s|m|o]] [-F hostname_in_certificate]
Conecta con una instancia de SQL Server. También cierra la conexión actual.
Important
El :Connect comando no actúa como separador de lotes implícito. Las instrucciones Transact-SQL almacenadas en búfer en el lote actual no se ejecutan hasta que se emite un comando GO . Si usa varios :Connect comandos sin instrucciones intermedias GO , todas las instrucciones almacenadas en búfer se ejecutan en el último servidor conectado y no en cada servidor individualmente.
Opciones de cifrado (
-N[s|m|o]):Use esta opción para solicitar una conexión cifrada. Si no incluye
-N,-Nm(paramandatory) es el valor predeterminado. Esta opción es un cambio importante de SQL Server 2022 (16.x) y versiones anteriores, donde-No(paraoptional) es el valor predeterminado.Value Description -NsEstricto -Nm(valor predeterminado)Mandatory -NoOpcional Nombre de host en el certificado (
-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.
Opciones de tiempo de espera:
Value Behavior 0Espera para siempre n>0Espera durante n segundos La variable de scripting
SQLCMDSERVERrefleja la conexión activa actual.Si no se especifica timeout, el valor de la variable
SQLCMDLOGINTIMEOUTes el predeterminado.
Si especifica solo user_name (ya sea como una opción o como una variable de entorno), sqlcmd le pedirá que escriba una contraseña. No se solicita a los usuarios si se establecen las variables de entorno SQLCMDUSER o SQLCMDPASSWORD . Si no se proporcionan opciones ni variables de entorno, se iniciará sesión en modo Autenticación de Windows. Por ejemplo, para conectar con una instancia, instance1, de SQL Server, myserver, mediante seguridad integrada, se necesitaría el siguiente comando:
:connect myserver\instance1
Para conectarse a la instancia predeterminada de myserver mediante variables de scripting, use la siguiente configuración:
:setvar myusername test
:setvar myservername myserver
:connect $(myservername) $(myusername)
[:]!! command
Ejecuta comandos del sistema operativo. Para ejecutar un comando de sistema operativo, inicie una línea con dos signos de exclamación (!!) seguidos del comando del sistema operativo. Por ejemplo:
:!! dir
Note
El comando se ejecuta en el equipo donde se ejecuta sqlcmd .
:XML [ ENCENDIDO | APAGADO ]
Para más información, consulte Formato de salida XML y Formato de salida de JSON más adelante en este artículo
:Help
Enumera los comandos sqlcmd , junto con una breve descripción de cada comando.
Nombres de archivo de sqlcmd
Especifique los archivos de entrada sqlcmd mediante la -i opción o el :r comando . Especifique los archivos de salida mediante la -o opción o los :Errorcomandos , :Outy :Perftrace . Al trabajar con estos archivos, use las instrucciones siguientes:
Use valores de nombre de archivo independientes para
:Error,:Outy:Perftrace. Si usa el mismo nombre de archivo, los comandos podrían mezclar entradas.Si invoca un archivo de entrada ubicado en un servidor remoto utilizando sqlcmd desde un equipo local, y el archivo contiene una ruta de acceso de archivo de unidad como
:Out c:\OutputFile.txt, sqlcmd crea el archivo de salida en el equipo local y no en el servidor remoto.Entre las rutas de archivo válidas se incluyen:
C:\<filename>,\\<Server>\<Share$>\<filename>y"C:\Some Folder\<file name>". Si hay un espacio en la ruta de acceso, use comillas.Cada nueva sesión de sqlcmd sobrescribirá los archivos existentes que tengan el mismo nombre.
Mensajes informativos
sqlcmd imprime cualquier mensaje informativo que envíe el servidor. En el ejemplo siguiente, después de que sqlcmd ejecute las instrucciones Transact-SQL, imprime un mensaje informativo.
Inicie sqlcmd. En el símbolo del sistema de sqlcmd, escriba lo siguiente:
USE AdventureWorks2025;
GO
Al presionar Entrar, sqlcmd imprime el siguiente mensaje informativo:
Changed database context to 'AdventureWorks2025'.
Formato de salida de consultas de Transact-SQL
sqlcmd primero imprime un encabezado de columna que contiene los nombres de columna especificados en la lista de selección. Los nombres de columna se separan mediante el carácter SQLCMDCOLSEP. De forma predeterminada, este separador de columnas es un espacio. Si el nombre de la columna es menor que el ancho de columna, sqlcmd rellena la salida con espacios hasta la columna siguiente.
sqlcmd imprime una línea separadora que es una serie de caracteres de guion. La siguiente salida muestra un ejemplo.
Inicie sqlcmd. En el símbolo del sistema de sqlcmd, escriba lo siguiente:
USE AdventureWorks2025;
SELECT TOP (2) BusinessEntityID,
FirstName,
LastName
FROM Person.Person;
GO
Al presionar Entrar, sqlcmd devuelve el siguiente conjunto de resultados.
BusinessEntityID FirstName LastName
---------------- ------------ ----------
285 Syed Abbas
293 Catherine Abel
(2 row(s) affected)
Aunque la columna BusinessEntityID tiene solo cuatro caracteres de ancho, se expande para acomodar el nombre de columna más largo. De forma predeterminada, sqlcmd finaliza la salida en 80 caracteres. Puede cambiar este ancho mediante la -w opción o estableciendo la SQLCMDCOLWIDTH variable de scripting.
formato de salida XML
La salida XML de una cláusula FOR XML se ofrece sin formato en un flujo continuo.
Cuando espere una salida XML, use el siguiente comando: :XML ON.
Note
sqlcmd devuelve mensajes de error en el formato habitual. Tenga en cuenta que los mensajes de error también salen en el flujo de texto XML en formato XML. Al usar :XML ON, sqlcmd no muestra mensajes informativos.
Para desactivar el modo XML, use el siguiente comando: :XML OFF.
El comando GO no debe aparecer antes de que se emita el comando :XML OFF, ya que el comando :XML OFF vuelve a cambiar sqlcmd a la salida orientada a filas.
Los datos XML (de flujo) y los datos del conjunto de filas no se pueden mezclar. Si el comando :XML ON no se emitió antes de que se ejecute una instrucción Transact-SQL que genera secuencias XML, la salida se desordena. Una vez emitido el :XML ON comando, no se pueden ejecutar Transact-SQL instrucciones que generan conjuntos de filas normales.
Note
El comando :XML no admite la instrucción SET STATISTICS XML.
Formato de salida JSON
Cuando espere una salida de JSON, use el siguiente comando: :XML ON. De lo contrario, la salida incluye el nombre de columna y el texto JSON, Esta salida no es JSON válido.
Para desactivar el modo XML, use el siguiente comando: :XML OFF.
Para más información, consulte Formato de salida XML en este artículo.
Uso de la autenticación de Microsoft Entra
Ejemplos que usan la autenticación de Microsoft Entra:
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30