Compartir a través de


Uso de la utilidad sqlcmd

La utilidad sqlcmd es una herramienta de línea de comandos diseñada para la ejecución ad hoc e interactiva de instrucciones y scripts de Transact-SQL, así como para automatizar las tareas de scripting de Transact-SQL. Para usar sqlcmd de forma interactiva o para compilar archivos de script que se van a ejecutar mediante sqlcmd, los usuarios deben comprender Transact-SQL. La sqlcmd utilidad se usa normalmente de las siguientes maneras:

  • Los usuarios introducen de manera interactiva instrucciones Transact-SQL de forma similar a trabajar en la línea de comandos. Los resultados se muestran en el símbolo del sistema. Para abrir una ventana del símbolo del sistema, haga clic en Inicio, haga clic en Todos los programas, seleccione Accesorios, y a continuación, 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 por sqlcmd, vea sqlcmd Utility.

  • Los usuarios envían un sqlcmd trabajo especificando una única instrucción Transact-SQL para ejecutar o indicando a la utilidad un archivo de texto que contiene instrucciones Transact-SQL para ejecutar. La salida normalmente se dirige a un archivo de texto, pero también se puede mostrar en el terminal de comandos.

  • 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 usadas normalmente

Las siguientes opciones se usan con más frecuencia:

  • Opción de servidor (-S) que identifica la instancia de Microsoft SQL Server a la que sqlcmd se 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 y no tiene que especificarse.

  • Opciones de entrada (-Q, -q e -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.

Conexión a la utilidad sqlcmd

A continuación se muestran los usos comunes de la sqlcmd utilidad:

  • Conectarse a una 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 valor predeterminado y sqlcmd se conecta a la instancia predeterminada mediante la autenticación de Windows.

  • Conectarse a una instancia con nombre mediante la autenticación de Windows para ejecutar de forma interactiva instrucciones Transact-SQL:

    sqlcmd -S <ComputerName>\<InstanceName>  
    

    o

    sqlcmd -S .\<InstanceName>  
    
  • Conectarse a una instancia con nombre mediante la autenticación de Windows y especificar archivos de entrada y salida:

    sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -o <MyOutput.rpt>  
    
  • Conectarse a la instancia predeterminada en el equipo local utilizando la autenticación de Windows, ejecutar una consulta y mantener sqlcmd en funcionamiento después de que la consulta haya finalizado:

    sqlcmd -q "SELECT * FROM AdventureWorks2012.Person.Person"  
    
  • Conectarse a la instancia predeterminada en el equipo local mediante la autenticación de Windows, ejecutar una consulta, dirigir la salida a un archivo y salir sqlcmd después de que la consulta haya terminado de ejecutarse:

    sqlcmd -Q "SELECT * FROM AdventureWorks2012.Person.Person" -o MyOutput.txt  
    
  • Conectarse a una instancia con nombre mediante la autenticación de SQL Server para ejecutar de forma interactiva instrucciones Transact-SQL, con sqlcmd que solicita una contraseña.

    sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>  
    

    Nota:

    Para ver una lista de las opciones admitidas por la utilidad sqlcmd, ejecute: sqlcmd -?.

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 o consultas de entrada. Por ejemplo:

sqlcmd -S <ComputerName>\<InstanceName>

Cuando el comando se ejecuta sin archivos de entrada o consultas, sqlcmd se conecta a la instancia especificada de SQL Server y luego muestra una nueva línea con un 1> seguido de un carácter de subrayado parpadeante denominado aviso sqlcmd. 1 significa que esta es la primera línea de una instrucción Transact-SQL, y el indicador sqlcmd es el punto en el que la instrucción Transact-SQL comenzará cuando la escribas.

En elsqlcmd, puedes escribir tanto comandos sqlcmd como instrucciones Transact-SQL, como GO y EXIT. Cada instrucción Transact-SQL se coloca en un búfer llamado caché de declaraciones. Estas instrucciones se envían a SQL Server después de escribir el GO comando y presionar ENTRAR. Para salir sqlcmdde , escriba EXIT o QUIT al principio de una nueva línea.

Para borrar la memoria caché de declaraciones, escriba :RESET. Escribir ^C hace que sqlcmd salga. ^C también se puede usar para detener la ejecución de la memoria caché de instrucciones después de que se haya emitido un GO comando.

Transact-SQL instrucciones que se escriben en una sesión interactiva se pueden editar escribiendo el comando :ED y el símbolo del sistema sqlcmd. El editor se abrirá 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 citadas

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 produce en el servidor). Las variables de scripting no se expandirán cuando aparezcan dentro de 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 que tienen cadenas que abarcan varias líneas. Por ejemplo, la siguiente SELECT instrucción abarca varias líneas, pero es una sola cadena ejecutada al presionar 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 ve cuando se ejecuta sqlcmd de forma interactiva.

Al abrir una ventana del símbolo del sistema, verás una línea similar a:

C:\> _

Esto significa que la carpeta es la carpeta C:\ actual y, si especifica un nombre de archivo, Windows buscará el 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 de comandos será:

C:\>sqlcmd

1> _

Esto significa que se ha conectado a la instancia de SQL Server y sqlcmd ya está listo para aceptar declaraciones Transact-SQL y comandos sqlcmd. El guion bajo parpadeante después del 1> es el símbolo del sqlcmd que marca la ubicación en la que se mostrarán las instrucciones y comandos que escriba. Ahora, escriba y presione ENTRAR y, a continuación, escriba USE AdventureWorks2012GO y presione ENTRAR. El contenido de la ventana de comandos será:

sqlcmd

USE AdventureWorks2012;

GO

El conjunto de resultados es el siguiente:

Changed database context to 'AdventureWorks2012'.

1> _

Presione ENTRAR después de escribir USE AdventureWorks2012 señaló a sqlcmd para iniciar una nueva línea. Al presionar ENTRAR, después de escribir GO,, se indicó sqlcmd para enviar la instrucción USE AdventureWorks2012 a la instancia de SQL Server. sqlcmd a continuación, devolvió un mensaje para indicar que la USE instrucción se completó correctamente y mostró un nuevo símbolo del sistema como una señal para escribir una nueva 1> instrucción o comando.

En el ejemplo siguiente se muestra lo que contiene la ventana del símbolo del sistema si escribe una SELECT instrucción , un GO para ejecutar y SELECTun EXIT para salir sqlcmdde :

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 después de la línea 3> GO son la salida de una SELECT instrucción . Después de generar la salida, sqlcmd restablece el símbolo del sqlcmd sistema 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 hizo cuando la abrió por primera vez. Esto indica que sqlcmd ha salido de su sesión. Ahora ya puede cerrar la ventana del símbolo del sistema escribiendo otro comando EXIT.

Ejecución de archivos de scripts Transact-SQL mediante sqlcmd

Puede usar sqlcmd para ejecutar archivos de script de base de datos. Los archivos de script son archivos de texto que contienen una combinación de declaraciones Transact-SQL, comandos sqlcmd y variables de guion. 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, comandos y variables de scripting en un archivo de script de una manera similar a cómo funciona con instrucciones y comandos que se escriben de forma interactiva. La principal diferencia es que sqlcmd lee el archivo de entrada sin pausa en lugar de esperar a que un usuario escriba 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 forma interactiva un conjunto de instrucciones Transact-SQL en SQL Server Management Studio y, a continuación, guardar el contenido de la ventana Consulta como un archivo de script.

  • Puede crear un archivo de texto que contenga instrucciones Transact-SQL mediante un editor de texto, como el Bloc de notas.

Ejemplos

A. Ejecución de un script mediante sqlcmd

Inicie el Bloc de notas y escriba las sentencias 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 colocar la salida en MyOutput.txtMyFolder:

sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt

Cuando vea 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. Uso de sqlcmd con una conexión administrativa dedicada

En el ejemplo siguiente, sqlcmd se usa 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)

Use sqlcmd para finalizar el proceso de bloqueo.

1> KILL 64;

2> GO

C. Uso de sqlcmd para ejecutar un procedimiento almacenado

En el ejemplo siguiente se muestra cómo ejecutar un procedimiento almacenado mediante 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 indicador del sqlcmd sistema, introduzca 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. Uso de sqlcmd para el mantenimiento de la base de datos

En el ejemplo siguiente se muestra cómo usar 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 indicador 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. Uso de sqlcmd para ejecutar código en varias 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. Uso de sqlcmd en un archivo de script de Windows

Un sqlcmdcomando como sqlcmd -i C:\InputFile.txt -o C:\OutputFile.txt, se puede ejecutar en un archivo .bat junto con VBScript. En este caso, no use opciones interactivas. sqlcmd debe instalarse en el equipo que ejecuta el archivo .bat.

En primer lugar, cree los cuatro archivos siguientes:

  • 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. Uso de sqlcmd para establecer el cifrado en Azure SQL Database

Se puede ejecutar un sqlcmd en una conexión a SQL Database para especificar el cifrado y la confianza en certificados. Hay dos opciones de `sqlcmd` disponibles:

  • El cliente usa el interruptor -N para solicitar una conexión cifrada. Esta opción es equivalente a la opción ADO.net ENCRYPT = true.

  • El cliente utiliza el interruptor -C para configurarlo de manera que confíe implícitamente en el certificado del servidor y no lo valide. Esta opción es equivalente a la opción ADO.net TRUSTSERVERCERTIFICATE = true.

El servicio SQL Database no admite todas las SET opciones disponibles 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 TRANSACCIONES_PROC_REMOTOS

  • SET ANSI_NULL_DEFAULT

Las siguientes opciones SET no generan excepciones, pero no se pueden usar. Están en desuso:

  • SET CONCAT_NULL_YIELDS_NULL

  • SET ANSI_PADDING

  • SET QUERY_GOVERNOR_COST_LIMIT

Sintaxis

En los ejemplos siguientes se hace referencia a los casos en los que la configuración del proveedor de SQL Server Native Client 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  
  

Los ejemplos siguientes hacen referencia a los casos en los que la configuración del proveedor de SQL Server Native Client 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 , el cifrado está habilitado incluso si Encrypt=No está en la cadena de conexión.

Véase también

Utilidad sqlcmd
Usar sqlcmd con variables de script
Modificar scripts SQLCMD con el Editor de consultas
Administrar las etapas de trabajo
Crear un paso de trabajo CmdExec