Usar la utilidad sqlcmd
La sqlcmd
utilidad es una utilidad de línea de comandos para la ejecución ad hoc e interactiva de instrucciones y scripts de Transact-SQL y para automatizar tareas de scripting de Transact-SQL. Para usar sqlcmd
de forma interactiva o para compilar archivos de script para que se ejecuten mediante sqlcmd
, los usuarios deben comprender Transact-SQL. La utilidad sqlcmd
se usa normalmente de las formas siguientes:
Los usuarios escriben de forma interactiva instrucciones Transact-SQL de forma similar a trabajar en 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 Accesoriosy haga clic en Símbolo del sistema. En el símbolo del sistema, escriba
sqlcmd
seguido de una lista de opciones que quiera. Para obtener una lista completa de las opciones admitidas porsqlcmd
, vea sqlcmd Utility.Los usuarios envían un
sqlcmd
trabajo especificando una sola instrucción Transact-SQL que se va a ejecutar o apuntando la utilidad a un archivo de texto que contiene 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 usan con mayor frecuencia:
La opción de servidor (-S) que identifica la instancia de Microsoft SQL Server a la que se
sqlcmd
conecta.Opciones de autenticación (-E, -U y -P) que especifican las credenciales que
sqlcmd
usa para conectarse a la instancia de SQL Server.Nota:
La opción -E es la predeterminada, por lo que no es necesario especificarla.
Opciones de entrada (-Q, -q y -i) que identifican la ubicación de la entrada en
sqlcmd
.Opción de salida (-o) que especifica el archivo en el que
sqlcmd
se va a colocar su salida.
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 manera interactiva instrucciones Transact-SQL:
sqlcmd -S <ComputerName>
Nota
En el ejemplo anterior, -E no se especifica porque es el valor 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 manera interactiva instrucciones Transact-SQL:
sqlcmd -S <ComputerName>\<InstanceName>
or
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 AdventureWorks2012.Person.Person"
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 AdventureWorks2012.Person.Person" -o MyOutput.txt
Conexión a una instancia con nombre mediante la autenticación de SQL Server para ejecutar instrucciones Transact-SQL de forma interactiva, con
sqlcmd
la solicitud de una contraseña:sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>
Nota
Para obtener una lista de opciones admitidas por la utilidad
sqlcmd
, veasqlcmd -?
.
Ejecutar instrucciones Transact-SQL de forma interactiva mediante sqlcmd
Puede usar la sqlcmd
utilidad 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 o -i para especificar los archivos de entrada o las consultas. Por ejemplo:
sqlcmd -S <ComputerName>\<InstanceName>
Cuando el comando se ejecuta sin archivos de entrada o consultas, se conecta a la instancia especificada de SQL Server y, a continuación, sqlcmd
muestra una nueva línea con un 1>
seguido de un carácter de subrayado parpadeante denominado símbolo del sqlcmd
sistema. 1
indica que se trata de la primera línea de una instrucción Transact-SQL y el símbolo del sqlcmd
sistema es el punto en el que se iniciará la instrucción Transact-SQL al escribirla.
En el símbolo del sqlcmd
sistema, puede escribir instrucciones y sqlcmd
comandos de Transact-SQL, como GO
y EXIT
. Cada instrucción Transact-SQL se coloca en un búfer denominado "caché de instrucciones". Estas instrucciones se envían a SQL Server después de escribir el GO
comando y presionar ENTRAR. Para salir sqlcmd
de , escriba EXIT
o QUIT
al principio de una nueva línea.
Para borrar la memoria caché de instrucciones, escriba :RESET
. Escribir ^C
hace que sqlcmd
salga. ^C
se puede usar también para detener la ejecución de la memoria caché de instrucciones después de emitir un comando GO
.
Las instrucciones Transact-SQL que se escriben en una sesión interactiva se pueden editar escribiendo el comando :ED y el símbolo del sqlcmd
sistema. 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 Transact-SQL revisada.
Cadenas entre comillas
Los caracteres que están entre comillas se usan 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 scripting no se expandirán si aparecen en una cadena.
Por ejemplo:
sqlcmd
PRINT "Length: 5"" 7'";
GO
El conjunto de resultados es el siguiente:
Length: 5" 7'
Cadenas que abarcan varias líneas
sqlcmd
admite scripts 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
Este 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, solo 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
ya 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 los comandos que se escriban. Ahora, escriba y presione USE AdventureWorks2012
ENTRAR y, a continuación, escriba GO
y presione ENTRAR. El contenido de la ventana del símbolo del sistema será:
sqlcmd
USE AdventureWorks2012;
GO
El conjunto de resultados es el siguiente:
Changed database context to 'AdventureWorks2012'.
1> _
Presionar ENTRAR después de escribir USE AdventureWorks2012
indica a sqlcmd
que inicie una línea nueva. Al presionar ENTRAR, después de escribir GO,
, se indicó que sqlcmd
enviara la instrucción USE AdventureWorks2012
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 AdventureWorks2012;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
El conjunto de resultados es el siguiente:
BusinessEntityID FirstName LastName
----------- -------------------------------- -----------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
(3 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 script Transact-SQL mediante sqlcmd
Puede usar sqlcmd
para ejecutar los archivos de script de base de datos. Los archivos de script son archivos de texto que contienen una combinación de instrucciones, sqlcmd
comandos y variables de scripting de Transact-SQL. Para obtener más información sobre cómo incluir variables en scripts, vea Usar sqlcmd con variables de script. sqlcmd
funciona con las instrucciones, los comandos y las variables de scripting en un archivo de script 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 scripting.
Hay distintas maneras de crear archivos de script de base de datos:
Puede compilar y depurar de manera interactiva un conjunto de instrucciones Transact-SQL en SQL Server Management Studio y, luego, guardar el contenido de la ventana Consulta como archivo de script.
Puede crear un archivo de texto que contenga instrucciones Transact-SQL con un editor de texto, como el Bloc de notas.
Ejemplos
A. Ejecutar un script con sqlcmd
Inicie el Bloc de notas y escriba las instrucciones Transact-SQL siguientes:
USE AdventureWorks2012;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
Cree una carpeta llamada MyFolder
y guarde el script como el archivo MyScript.sql
en la carpeta C:\MyFolder
. Escriba lo siguiente en el símbolo del sistema para ejecutar el script 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 'AdventureWorks2012'.
BusinessEntityID FirstName LastName
---------------- ----------- -----------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
(3 rows affected)
B. Usar 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 de administrador dedicada (DAC).
C:\>sqlcmd -S ServerName -A
1> SELECT blocked FROM sys.dm_exec_requests WHERE blocked <> 0;
2> GO
El conjunto de resultados es el siguiente:
spid blocked
------ -------
62 64
(1 rows affected)
Utilice sqlcmd
para finalizar el proceso de bloqueo.
1> KILL 64;
2> GO
C. Usar 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 AdventureWorks2012;
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.Person
WHERE FirstName = @FirstName
AND LastName = @LastName;
SET NOCOUNT OFF
En el símbolo del sistema sqlcmd
, escriba lo siguiente:
C:\sqlcmd
1> :Setvar FirstName Gustavo
1> :Setvar LastName Achong
1> EXEC dbo.ContactEmailAddress $(Gustavo),$(Achong)
2> GO
EmailAddress
-----------------------------
gustavo0@adventure-works.com
D. Usar 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. Usar sqlcmd para ejecutar código en múltiples instancias
El siguiente código en un archivo muestra un script 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 AdventureWorks2012
1> :XML ON
1> SELECT TOP 3 FirstName + ' ' + LastName + ', '
2> FROM Person.Person
3> GO
Syed Abbas, Catherine Abel, Kim Abercrombie,
F. Usar sqlcmd en un archivo de script de Windows
Un sqlcmd
comando 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 usar 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
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
G. Usar sqlcmd para establecer el cifrado en Azure SQL Database
sqlcmd
Se puede ejecutar en una conexión para SQL Database datos en para especificar el cifrado y la confianza de certificado. Hay disponibles dos opciones 'sqlcmd'':
El modificador -N lo usa el cliente para solicitar una conexión cifrada. Esta opción es equivalente a ADO.net
ENCRYPT = true
.El modificador -C lo emplea el cliente para configurarlo implícitamente para el certificado de servidor confiable y no validarlo. Esta opción es equivalente a ADO.net
TRUSTSERVERCERTIFICATE = true
.
El servicio SQL Database no admite todas las opciones disponibles SET
en una instancia de SQL Server. Las siguientes opciones producen un error cuando la opción SET
correspondiente está establecida en ON
u OFF
:
SET ANSI_DEFAULTS
SET ANSI_NULLS
SET REMOTE_PROC_TRANSACTIONS
SET ANSI_NULL_DEFAULT
Las siguientes opciones de SET no producen excepciones pero no se pueden usar. Se han quedado en desuso:
SET CONCAT_NULL_YIELDS_NULL
SET ANSI_PADDING
SET QUERY_GOVERNOR_COST_LIMIT
Sintaxis
En los siguientes ejemplos se hace referencia a los casos donde la configuración del proveedor Native Client SQL Server incluye: ForceProtocolEncryption = False
, Trust Server Certificate = No
Conecte usando las credenciales de Windows y cifre la comunicación:
SQLCMD -E -N
Conecte usando las credenciales de Windows y el certificado de servidor de confianza:
SQLCMD -E -C
Conecte usando las credenciales de Windows, comunicación cifrada y el certificado de servidor de confianza:
SQLCMD -E -N -C
En los siguientes ejemplos se hace referencia a los casos donde la configuración del proveedor Native Client SQL Server incluye: ForceProtocolEncryption = True
, TrustServerCertificate = Yes
.
Conecte usando las credenciales de Windows, comunicación cifrada y el certificado de servidor de confianza:
SQLCMD -E
Conecte usando las credenciales de Windows, comunicación cifrada y el certificado de servidor de confianza:
SQLCMD -E -N
Conecte usando las credenciales de Windows, comunicación cifrada y el certificado de servidor de confianza:
SQLCMD -E -T
Conecte usando las credenciales de Windows, comunicación cifrada y el certificado de servidor de confianza:
SQLCMD -E -N -C
Si el proveedor especifica ForceProtocolEncryption = True
se habilita el cifrado aun cuando Encrypt=No
en la cadena de conexión.
Consulte también
Utilidad sqlcmd
Usar sqlcmd con variables de script
Modificar scripts SQLCMD con el Editor de consultas
Administrar pasos de trabajo
Crear un paso de trabajo CmdExec