Modificar secuencias de comandos SQLCMD con el Editor de consultas
Con el Editor de consultas de Database Engine (Motor de base de datos) de SQL Server Management Studio, es posible escribir y modificar consultas como scripts SQLCMD. Los scripts SQLCMD se usan cuando es necesario procesar comandos del sistema de Windows e instrucciones Transact-SQL en el mismo script.
Modo SQLCMD
Para utilizar el Editor de consultas de Database Engine (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 scripts 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 Database Engine (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
Plan de presentación
Habilitar los scripts SQLCMD en el Editor de consultas
Para activar el modo de scripting SQLCMD para una ventana activa del Editor de consultas de Database Engine (Motor de base de datos), utilice el procedimiento siguiente.
Para cambiar una ventana del Editor de consultas de Database Engine al modo SQLCMD
En el Explorador de objetos, haga clic con el botón secundario en el servidor y, a continuación, haga clic en Nueva consulta para abrir una ventana nueva del Editor de consultas de Database Engine (Motor de base de datos).
En el menú Consulta, haga clic en Modo SQLCMD.
El Editor de consultas ejecuta instrucciones sqlcmd en su contexto.
En la barra de herramientas del Editor SQL, en la lista Bases de datos disponibles, seleccione AdventureWorks.
En la ventana Editor de consultas, escriba las siguientes instrucciones Transact-SQL y, a continuación, la instrucción !!DIR sqlcmd:
SELECT DISTINCT Type FROM Sales.SpecialOffer; GO !!DIR GO SELECT ProductCategoryID, Name FROM Production.ProductCategory; GO
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.
En el panel Resultados, haga clic en la ficha Mensajes para ver los mensajes de las tres instrucciones:
(6 filas afectadas)
<La información de 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 (utilidad) o realice el tutorial de SQLCMD.
Habilitar los scripts SQLCMD de forma predeterminada
Para activar los scripts SQLCMD de forma predeterminada, seleccione Opciones en el menú Herramientas, expanda Ejecución de la consulta y 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
Tras habilitar el modo scripts, 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.
Sólo 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 !! 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 !!>". "%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 !!: o utilizarse sin nada que lo preceda.
El Editor de consultas de Database Engine (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 integradas ni variables osql. El procesamiento de SQLCMD por SQL Server Management Studio distingue entre mayúsculas y minúsculas para las variables. Por ejemplo, PRINT '$(COMPUTERNAME)' genera el resultado correcto, pero PRINT '$(ComputerName)' devuelve un error.
Advertencia |
---|
SQL Server Management Studio usa Microsoft.NET FrameworkSqlClient para la ejecución en los modos normal y SQLCMD. Cuando se ejecuta desde la línea de comandos, SQLCMD utiliza el proveedor OLE DB. Puesto que se pueden aplicar diferentes opciones predeterminadas, es posible observar diferentes comportamientos al ejecutar la misma consulta en el modo SQLCMD de SQL Server Management Studio y en la herramienta SQLCMD. |
Sintaxis SQLCMD compatible
El Editor de consultas de Database Engine (Motor de base de datos) admite las siguientes palabras clave de scripts 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 ficha 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 envía un mensaje al destino, por cada palabra clave no compatible, que indica que se omite un comando. El script se ejecutará correctamente, aunque los comandos no compatibles se omitirán.
Advertencia |
---|
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 los scripts SQLCMD habilitadas, 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
El siguiente ejemplo usa una instrucción sqlcmd para crear un archivo de salida denominado testoutput.txt y ejecuta dos instrucciones SELECT de Transact-SQL 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