Modificar scripts SQLCMD con el Editor de consultas

Se aplica a: SQL Server (todas las versiones admitidas) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Mediante el Editor de consultas de Motor de base de datos de SQL Server Management Studio puede escribir y editar consultas como scripts SQLCMD. Los scripts SQLCMD se usan cuando es necesario procesar comandos del sistema de Windows e instrucciones de Transact-SQL en el mismo script.

Modo SQLCMD

Para utilizar el Editor de consultas de Motor de base de datos para escribir o modificar scripts SQLCMD, es necesario habilitar el modo de scripting SQLCMD. De forma predeterminada, el modo SQLCMD no está habilitado en el Editor de consultas. Puede habilitar el modo de scripting si hace clic en el icono Modo SQLCMD de la barra de herramientas o si selecciona Modo SQLCMD en el menú Consulta .

Nota:

Al habilitar el modo SQLCMD, se desactiva IntelliSense y el depurador de Transact-SQL en el Editor de consultas de Motor de base de datos.

Los scripts SQLCMD del Editor de consultas pueden utilizar las mismas características que todos los scripts Transact-SQL. Entre estas características figuran las siguientes:

  • Código de colores

  • Ejecución de scripts

  • Control de código fuente

  • Análisis de scripts

  • Showplan

Habilitar scripting SQLCMD en el Editor de consultas

Para activar el modo de scripting SQLCMD para una ventana activa del Editor de consultas de Motor de base de datos , utilice el procedimiento siguiente.

Para cambiar una ventana del Editor de consultas de Database Engine al modo SQLCMD

  1. En el Explorador de objetos, haga clic con el botón derecho en el servidor y, después, haga clic en Nueva consultapara abrir una ventana nueva del Editor de consultas de Motor de base de datos .

  2. En el menú Consulta , haga clic en Modo SQLCMD.

    El Editor de consultas ejecuta instrucciones sqlcmd en el contexto del Editor de consultas.

  3. En la barra de herramientas del Editor SQL , en la lista Bases de datos disponibles , seleccione AdventureWorks2019.

  4. En la ventana Editor de consultas, escriba las dos instrucciones Transact-SQL siguientes y la instrucción !!DIRsqlcmd:

    SELECT DISTINCT Type FROM Sales.SpecialOffer;  
    GO  
    !!DIR  
    GO  
    SELECT ProductCategoryID, Name FROM Production.ProductCategory;  
    GO  
    
  5. Presione F5 para ejecutar toda la sección de instrucciones mixtas Transact-SQL y MS-DOS.

    Observe los paneles de resultados SQL de la primera y tercera instrucciones.

  6. En el panel Resultados , haga clic en la pestaña Mensajes para ver los mensajes de las tres instrucciones:

    • (6 filas afectadas)

    • <La información del directorio>

    • (4 filas afectadas)

Importante

Cuando se ejecuta desde la línea de comandos, la utilidad sqlcmd permite una interacción total con el sistema operativo. Al usar el Editor de consultas en Modo SQLCMD, debe tener cuidado de no ejecutar instrucciones interactivas. El Editor de consultas no puede responder a comandos del sistema operativo.

Para obtener más información acerca de cómo ejecutar SQLCMD, vea sqlcmd Utilityo realice el tutorial de SQLCMD.

Habilitar scripting SQLCMD de forma predeterminada

Para activar scripting SQLCMD de forma predeterminada, seleccione Opciones en el menú Herramientas, expanda Ejecución de la consultay SQL Server, haga clic en la página General y, a continuación, active la casilla De forma predeterminada, abrir nuevas consultas en modo SQLCMD .

Escribir y modificar scripts SQLCMD

Después de habilitar el modo de scripting, puede escribir comandos SQLCMD e instrucciones Transact-SQL. Se aplican las reglas siguientes:

  • Los comandos SQLCMD deben ser la primera instrucción de una línea.

  • Solo se admite un comando SQLCMD en cada línea.

  • Los comandos SQLCMD pueden ir precedidos de comentarios o espacios en blanco.

  • Los comandos SQLCMD dentro de caracteres de comentario no se ejecutan.

  • Los caracteres de comentario de una única línea son dos guiones (--) y deben aparecer al comienzo de una línea.

  • Los comandos del sistema operativo deben ir precedidos de dos signos de exclamación de cierre (!!). El comando con dos signos de exclamación de cierre hace que la instrucción que los sigue se ejecute mediante el procesador de comandos cmd.exe . El texto situado tras !! se pasa como un parámetro a cmd.exe, de modo que la línea de comandos final se ejecutará como "%SystemRoot%\system32\cmd.exe /c <text after !!>".

  • Para hacer una distinción clara entre los comandos SQLCMD y Transact-SQL, todos los comandos SQLCMD deben ir precedidos de dos puntos (:).

  • El comando GO puede ir precedido de !!:

  • El Editor de consultas de Motor de base de datos es compatible con las variables de entorno y las variables definidas como parte de un script SQLCMD, aunque no es compatible con variables SQLCMD no integradas ni variables osql . El procesamiento de SQLCMD en SQL Server Management Studio distingue mayúsculas y minúsculas para las variables. Por ejemplo, PRINT '$(COMPUTERNAME)' genera el resultado correcto, pero PRINT '$(ComputerName)' devuelve un error.

Precaución

SQL Server Management Studio usa Microsoft .NET FrameworkSqlClient para la ejecución en modo normal y SQLCMD. Cuando se ejecuta desde la línea de comandos, SQLCMD utiliza el proveedor OLE DB. Como se pueden aplicar diferentes opciones predeterminadas, es posible observar otros comportamientos al ejecutar la misma consulta en el modo SQLCMD de SQL Server Management Studio y en la utilidad SQLCMD.

Sintaxis SQLCMD compatible

El Editor de consultas de Motor de base de datos admite las siguientes palabras clave de script SQLCMD:

[!!:]GO[count]

!! <command>

:exit(statement)

:Quit

:r <filename>

:setvar <var> <value>

:connect server[\instance] [-l login_timeout] [-U user [-P password]]

:on error [ignore|exit]

:error <filename>|stderr|stdout

:out <filename>|stderr|stdout

Nota:

Tanto para :error como para :out, stderr y stdout envían los resultados a la pestaña de mensajes.

Los comandos SQLCMD que no aparecen en la lista anterior no son compatibles con el Editor de consultas. Cuando se ejecuta un script que contiene palabras clave SQLCMD no compatibles, el Editor de consultas enviará un mensaje al destino, por cada palabra clave no compatible, que indica que se omite el comando <comando omitido>. El script se ejecutará correctamente, aunque los comandos no compatibles se omitirán.

Precaución

Puesto que no se está iniciando SQLCMD desde la línea de comandos, existen algunas limitaciones al ejecutar el Editor de consultas en modo SQLCMD. No es posible enviar parámetros de línea de comandos como variables y, dado que el Editor de consultas no puede responder a las solicitudes del sistema operativo, hay que tener cuidado de no ejecutar instrucciones interactivas.

Código de colores en los scripts SQLCMD

Con scripting SQLCMD habilitado, los scripts utilizarán códigos de colores. El código de colores de las palabras clave de Transact-SQL permanece igual. Los comandos SQLCMD se presentan con un fondo sombreado.

Ejemplo

En el ejemplo siguiente se usa una instrucción sqlcmd para crear un archivo de salida denominado testoutput.txt y se ejecutan dos instrucciones Transact-SQL SELECT junto con un comando del sistema operativo (para imprimir el directorio actual). El archivo resultante contiene la salida del mensaje de la instrucción DIR seguida de la salida de resultados de las instrucciones Transact-SQL.

:out C:\testoutput.txt  
SELECT @@VERSION As 'Server Version'  
!!DIR  
!!:GO  
SELECT @@SERVERNAME AS 'Server Name'  
GO  

Consulte también

Utilidad sqlcmd