Usar la utilidad sqlcmd
Actualizado: 17 de julio de 2006
La utilidad sqlcmd es una utilidad del símbolo del sistema de Microsoft Win32 para la ejecución ad hoc e interactiva de instrucciones y secuencias de comandos Transact-SQL, y para la automatización de tareas de secuencias de comandos Transact-SQL. Para utilizar sqlcmd interactivamente, o para crear archivos de secuencias de comandos que se ejecutan mediante sqlcmd, los usuarios deben estar familiarizados con Transact-SQL. La utilidad sqlcmd se usa normalmente de las formas siguientes:
- Los usuarios escriben instrucciones Transact-SQL interactivamente de una forma similar al modo en que trabajan con el símbolo del sistema. Los resultados se muestran en el símbolo del sistema. Para abrir una ventana de símbolo del sistema, haga clic en Inicio, Todo los programas, seleccione Accesorios y haga clic en Símbolo del sistema. En el símbolo del sistema, escriba sqlcmd seguido de una lista de opciones que desee. Para obtener una lista completa de opciones admitidas por sqlcmd, vea sqlcmd (utilidad).
- Los usuarios envían un trabajo sqlcmd especificando la ejecución de una instrucción Transact-SQL individual o dirigiendo la utilidad hacia un archivo de texto que contiene las instrucciones Transact-SQL que se van a ejecutar. El resultado se dirige normalmente hacia un archivo de texto, aunque también se puede mostrar en el símbolo del sistema.
- Modo SQLCMD en el Editor de consultas de SQL Server Management Studio.
- Objetos de administración de SQL Server (SMO).
- Trabajos CmdExec del Agente SQL Server.
Opciones de sqlcmd que suelen utilizarse
Las siguientes opciones se utilizan con mayor frecuencia:
La opción del servidor (-S) que identifica la instancia de Microsoft SQL Server a la que se conecta sqlcmd.
Las opciones de autenticación (-E, -U y -P) que especifican las credenciales que utiliza sqlcmd para conectarse a una instancia de SQL Server.
[!NOTA] La opción -E es la predeterminada, por lo que no es necesario especificarla.
Las opciones de entrada (-Q, -q y -i) que identifican la ubicación de la entrada a sqlcmd.
La opción de salida (-o) que especifica el archivo en el que se guardará la salida de sqlcmd.
Conectarse a la utilidad sqlcmd
A continuación se indican los usos más comunes de la utilidad sqlcmd:
Conectarse a la instancia predeterminada mediante la Autenticación de Windows para ejecutar de forma interactiva instrucciones Transact-SQL:
sqlcmd -S <ComputerName>
[!NOTA] En el ejemplo anterior, -E no se especifica porque es el modificador predeterminado y sqlcmd se conecta a la instancia predeterminada mediante la Autenticación de Windows.
Conectarse a la instancia con nombre mediante la Autenticación de Windows para ejecutar de forma interactiva instrucciones Transact-SQL:
sqlcmd -S <ComputerName>\<InstanceName>
o bien
sqlcmd -S .\<InstanceName>
Conectarse a una instancia con nombre mediante la Autenticación de Windows y especificar los archivos de entrada y salida:
sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -o <MyOutput.rpt>
Conectarse a la instancia predeterminada del equipo local mediante la Autenticación de Windows, ejecutar una consulta y mantener la ejecución de sqlcmd hasta la finalización de la consulta:
sqlcmd -q "SELECT * FROM AdventureWorks.Person.Contact"
Conectarse a la instancia predeterminada del equipo local mediante la Autenticación de Windows, ejecutar una consulta, dirigir la salida a un archivo y cerrar sqlcmd después de la finalización de la consulta:
sqlcmd -Q "SELECT * FROM AdventureWorks.Person.Contact" -o MyOutput.txt
Conectarse a una instancia con nombre mediante la Autenticación de SQL Server para ejecutar interactivamente instrucciones Transact-SQL y hacer que sqlcmd solicite una contraseña:
sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>
[!NOTA] Para obtener una lista de opciones admitidas por la utilidad sqlcmd, vea
sqlcmd -?
.
Ejecutar instrucciones Transact-SQL de forma interactiva mediante sqlcmd
Se puede usar la utilidad sqlcmd de forma interactiva para ejecutar instrucciones Transact-SQL en una ventana del símbolo del sistema. Para ejecutar de forma interactiva instrucciones Transact-SQL mediante sqlcmd, ejecute la utilidad sin usar las opciones -Q, -q, -Z ni -i para especificar archivos de entrada o consultas. Por ejemplo:
sqlcmd -S <ComputerName>\<InstanceName>
Cuando se ejecuta el comando sin archivos de entrada ni consultas, sqlcmd se conecta a la instancia especificada de SQL Server y, a continuación, muestra una nueva línea con un 1>
seguido de un carácter de subrayado intermitente, denominado símbolo del sistema sqlcmd. El 1
significa que se trata de la primera línea de una instrucción Transact-SQL y el símbolo del sistema sqlcmd es el punto en el que empezará la instrucción Transact-SQL cuando la escriba.
En el símbolo de sistema sqlcmd, puede escribir instrucciones Transact-SQL y comandos de sqlcmd, como GO y EXIT. Cada instrucción Transact-SQL se coloca en un búfer llamado caché de instrucciones. Estas instrucciones se enviarán a SQL Server cuando escriba el comando GO y presione ENTRAR. Para salir de sqlcmd, escriba EXIT o QUIT al inicio de una nueva línea.
Para borrar la caché de instrucciones, escriba :RESET. Escribir ^C hace que se salga de sqlcmd. ^C se puede utilizar también para detener la ejecución de la caché de instrucciones después de emitir un comando GO.
Las instrucciones Transact-SQL que se escriben en una sesión interactiva pueden editarse si se escribe el comando**:ED** y el símbolo de sistema de sqlcmd. Se abrirá el editor y, después de editar la instrucción Transact-SQL y cerrar el editor, la instrucción Transact-SQL revisada aparecerá en la ventana de comandos. Escriba GO para ejecutar la instrucción revisada.
Cadenas entre comillas
Los caracteres que están entre comillas se utilizan sin ningún procesamiento previo adicional, con la excepción de que las comillas se pueden insertar en una cadena especificando dos comillas consecutivas. SQL Server trata esta secuencia de caracteres como una comilla. Sin embargo, la traducción se lleva a cabo en el servidor. Las variables de secuencias de comandos no se expandirán si aparecen en una cadena.
Por ejemplo:
sqlcmd
PRINT "Length: 5"" 7'"
GO
Éste es el conjunto de resultados.
Length: 5" 7'
Cadenas que abarcan varias líneas
sqlcmd admite secuencias de comandos con cadenas que abarcan varias líneas. Por ejemplo, la siguiente instrucción SELECT
abarca varias líneas, pero es una única cadena que se ejecuta cuando se presiona la tecla ENTRAR después de escribir GO
.
SELECT First line
FROM Second line
WHERE Third line
GO
Ejemplo de sqlcmd interactivo
Éste es un ejemplo de lo que se ve cuando se ejecuta sqlcmd de forma interactiva.
Cuando se abre una ventana del símbolo del sistema, sólo hay una línea similar a:
C:\> _
Esto significa que la carpeta C:\
es la carpeta actual y, si se especifica un nombre de archivo, Windows buscará ese archivo en esa carpeta.
Escriba sqlcmd para conectarse a la instancia predeterminada de SQL Server en el equipo local, y el contenido de la ventana del símbolo del sistema será:
C:\>sqlcmd
1> _
Esto significa que se ha conectado a una instancia de SQL Server y sqlcmd
está listo para aceptar instrucciones Transact-SQL y comandos de sqlcmd
. El carácter de subrayado intermitente después de 1>
es el símbolo del sistema sqlcmd
, que marca la ubicación donde se mostrarán las instrucciones y comandos que se escriban. Escriba USE AdventureWorks y presione ENTRAR; a continuación, escriba GO y presione ENTRAR. El contenido de la ventana del símbolo del sistema será:
sqlcmd
USE AdventureWorks;
GO
Éste es el conjunto de resultados.
Changed database context to 'AdventureWorks'.
1> _
Presionar ENTRAR después de escribir USE AdventureWorks
indica a sqlcmd
que inicie una línea nueva. Presionar ENTRAR después de escribir GO,
indica a sqlcmd
que envíe la instrucción USE AdventureWorks
a la instancia de SQL Server. sqlcmd
devuelve un mensaje para indicar que la instrucción USE
se completó correctamente y muestra un nuevo símbolo del sistema 1>
como señal de que el usuario puede escribir una instrucción o un comando nuevos.
En el ejemplo siguiente se muestra qué contiene la ventana del símbolo del sistema si escribe una instrucción SELECT
, GO
para ejecutar SELECT
y EXIT
para finalizar sqlcmd
:
sqlcmd
USE AdventureWorks;
GO
SELECT TOP (5) ContactID, FirstName, LastName
FROM Person.Contact;
GO
Éste es el conjunto de resultados.
ContactID FirstName LastName
----------- -------------------------------------------------- -----------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
4 Humberto Acevedo
5 Pilar Ackerman
(5 rows affected)
1> EXIT
C:\>
Las líneas posteriores a la línea 3> GO
son la salida de una instrucción SELECT
. Para generar una salida, sqlcmd
restablece el símbolo de sistema sqlcmd
y muestra 1>
. Después de escribir EXIT
en la línea 1>
, la ventana del símbolo del sistema muestra la misma línea que se mostró cuando se la abrió por primera vez. Esto indica que sqlcmd
ha finalizado la sesión. Ahora ya puede cerrar la ventana del símbolo del sistema escribiendo otro comando EXIT
.
Ejecutar archivos de secuencias de comandos Transact-SQL mediante sqlcmd
Puede utilizar sqlcmd para ejecutar los archivos de secuencia de comandos de base de datos. Los archivos de secuencia de comandos son archivos de texto que contienen una mezcla de instrucciones Transact-SQL, comandos de sqlcmd y variables de secuencias de comandos. Para obtener más información acerca de cómo crear secuencias de comandos con variables, vea Usar sqlcmd con variables de secuencia de comandos. sqlcmd funciona con las instrucciones, los comandos y las variables de secuencia de comandos en un archivo de secuencia de comandos de una forma parecida a como opera con instrucciones y comandos indicados de forma interactiva. La diferencia principal es que sqlcmd lee el archivo de entrada sin pausas, en lugar de esperar a que un usuario indique las instrucciones, los comandos y las variables de secuencia de comandos.
Hay distintas maneras de crear archivos de secuencia de comandos de base de datos:
- Puede generar y depurar de forma interactiva un conjunto de instrucciones Transact-SQL en SQL Server Management Studio y, luego, guardar el contenido de la ventana Consulta como archivo de secuencia de comandos.
- Puede crear un archivo de texto que contenga instrucciones Transact-SQL usando un editor de texto, como el Bloc de notas.
Ejemplos
A. Ejecutar una secuencia de comandos con sqlcmd
Inicie el Bloc de notas y escriba las siguientes instrucciones Transact-SQL:
USE AdventureWorks;
GO
SELECT TOP (5) ContactID, FirstName, LastName
FROM Person.Contact;
GO
Cree una carpeta llamada MyFolder
y guarde la secuencia de comandos como el archivo MyScript.sql
en la carpeta C:\MyFolder
. Escriba lo siguiente en el símbolo del sistema para ejecutar la secuencia de comandos y coloque la salida en MyOutput.txt
de MyFolder
:
sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt
Al mostrar el contenido de MyOutput.txt
en el Bloc de notas, verá lo siguiente:
Changed database context to 'AdventureWorks'.
ContactID FirstName LastName
----------- ----------- -----------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
4 Humberto Acevedo
5 Pilar Ackerman
(5 rows affected)
B. Utilizar sqlcmd con una conexión administrativa dedicada
En el siguiente ejemplo, se utiliza sqlcmd
para conectarse a un servidor que tiene un problema de bloqueo mediante la conexión administrativa dedicada (DAC).
C:\>sqlcmd -S ServerName -A
1> SELECT session_id, blocking_session_id FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;
2> GO
Éste es el conjunto de resultados.
session_id blocking_session_id
---------- -------------------
51 54
(1 rows affected)
Utilice sqlcmd
para finalizar el proceso de bloqueo.
1> KILL 54;
2> GO
C. Utilizar sqlcmd para ejecutar un procedimiento almacenado
En el ejemplo siguiente se muestra cómo ejecutar un procedimiento almacenado con sqlcmd
. Cree el siguiente procedimiento almacenado.
USE AdventureWorks;
IF OBJECT_ID ( 'dbo.ContactEmailAddress',`` 'P' ) IS NOT NULL
DROP PROCEDURE dbo.ContactEmailAddress;
GO
CREATE PROCEDURE dbo.ContactEmailAddress
(
@FirstName nvarchar(50)
,@LastName nvarchar(50)
)
AS
SET NOCOUNT ON
SELECT EmailAddress
FROM Person.Contact
WHERE FirstName = @FirstName
AND LastName = @LastName;
SET NOCOUNT OFF
En el símbolo del sistema sqlcmd
, escriba lo siguiente:
C:\sqlcmd
1> USE AdventureWorks;
2> GO
1> :Setvar FirstName Gustavo
1> :Setvar LastName Achong
1> EXEC dbo.ContactEmailAddress $(FirstName),$(LastName);
2> GO
EmailAddress
-----------------------------
gustavo0@adventure-works.com
D. Utilizar sqlcmd para mantenimiento de la base de datos
El siguiente ejemplo muestra cómo utilizar sqlcmd
para una tarea de mantenimiento de base de datos. Cree C:\BackupTemplate.sql
con el siguiente código.
USE master;
BACKUP DATABASE [$(db)] TO DISK='$(bakfile)';
En el símbolo del sistema sqlcmd
, escriba lo siguiente:
C:\ >sqlcmd
1> :connect <server>
Sqlcmd: Successfully connected to server <server>.
1> :setvar db msdb
1> :setvar bakfile c:\msdb.bak
1> :r c:\BackupTemplate.sql
2> GO
Changed database context to 'master'.
Processed 688 pages for database 'msdb', file 'MSDBData' on file 2.
Processed 5 pages for database 'msdb', file 'MSDBLog' on file 2.
BACKUP DATABASE successfully processed 693 pages in 0.725 seconds (7.830 MB/sec)
E. Utilizar sqlcmd para ejecutar código en múltiples instancias
El siguiente código en un archivo muestra una secuencia de comandos que se conecta a dos instancias. Observe el comando GO
antes de la conexión a la segunda instancia.
:CONNECT <server>\,<instance1>
EXEC dbo.SomeProcedure
GO
:CONNECT <server>\,<instance2>
EXEC dbo.SomeProcedure
GO
E. Devolver salida XML
El siguiente ejemplo muestra cómo se devuelve la salida XML sin formato, en un flujo continuo.
C:\>sqlcmd -d AdventureWorks
1> :XML ON
1> SELECT TOP 4 FirstName + ' ' + LastName + ', '
2> FROM Person.Contact
3> GO
Gustavo Achong, Catherine Abel, Kim Abercrombie, Humberto Acevedo,
F. Utilizar sqlcmd en un archivo de secuencia de comandos de Windows
Un comando de sqlcmd
como sqlcmd -i C:\InputFile.txt -o C:\OutputFile.txt,
se puede ejecutar en un archivo .bat junto con VBScript. En este caso, no se deben utilizar opciones interactivas. sqlcmd se debe instalar en el equipo que ejecuta el archivo .bat.
Primero, cree los siguientes cuatro archivos:
C:\badscript.sql
SELECT batch_1_this_is_an_error GO SELECT 'batch #2' GO
C:\goodscript.sql
SELECT 'batch #1' GO SELECT 'batch #2' GO
C:\returnvalue.sql
:exit(select 100) @echo off
C:\windowsscript.bat
@echo off echo Running badscript.sql sqlcmd -i badscript.sql -b -o out.log if not errorlevel 1 goto next1 echo == An error occurred :next1 echo Running goodscript.sql sqlcmd -i goodscript.sql -b -o out.log if not errorlevel 1 goto next2 echo == An error occurred :next2 echo Running returnvalue.sql sqlcmd -i returnvalue.sql -o out.log echo SQLCMD returned %errorlevel% to the command shell :exit
Después, en el símbolo del sistema, ejecute C:\windowsscript.bat
:
C:\>windowsscript.bat
Running badscript.sql
== An error occurred
Running goodscript.sql
Running returnvalue.sql
SQLCMD returned 100 to the command shell
Historial de cambios
Versión | Historial |
---|---|
17 de julio de 2006 |
|
Vea también
Tareas
Cómo crear un paso de trabajo CmdExec (SQL Server Management Studio)
Conceptos
Usar sqlcmd con variables de secuencia de comandos
Crear pasos de trabajo
Otros recursos
sqlcmd (utilidad)
Modificar secuencias de comandos SQLCMD con el Editor de consultas
Tutorial de la utilidad sqlcmd