Modificar scripts SQLCMD con el Editor de consultas

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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á permitido en el Editor de consultas. Puede habilitar el modo de scripting si selecciona 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:

  • Codificación en colores
  • Ejecución de scripts
  • Control de código fuente
  • Análisis de scripts
  • Showplan

Habilitar el scripting SQLCMD en el Editor de Power Query

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

Cambio de una ventana del Editor de Power Query del motor de base de datos al modo SQLCMD

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

  2. En el menú Consulta, seleccione el Modo SQLCMD.

    El Editor de Power Query ejecuta instrucciones sqlcmd en el contexto del Editor de Power Query.

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

  4. En la ventana Editor de Power Query, escriba las dos instrucciones Transact-SQL siguientes y la instrucción !!DIR SQLCMD:

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

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

  6. En el panel Resultados, seleccione 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 Utilidad sqlcmd o realice el tutorial de SQLCMD.

Habilitar EL scripting SQLCMD de manera predeterminada

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

Escritura y edición de 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:

Envíe la salida a la pestaña de mensajes para :error y :out, stderr y stdout.

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 Power Query envía un mensaje de "Ignorando comando <comando ignorado>" al destino por cada palabra clave no compatible. El script se ejecutará correctamente, pero se ignorarán los comandos no compatibles.

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 el 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 y 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

Pasos siguientes