Marko Zivkovic

Cómo usar los comandos SQLCMD en el editor de consultas SSMS

August 1, 2019 by

La modalidad de SQLCMD permite generar, crear, probar, ejecutar comandos SQLCMD o scripts en SQL Server Management Studio directamente en el editor de análisis. Esta opción está vigente desde SQL Server 2005.

TEste artículo manejara algunas de las palabras clave del script SQLCMD que acepta el Editor de consultas del motor de base de datos.

Para escribir o editar scripts SQLCMD en el editor de consultas, el modo SQLCMD debe estar habilitado. Por defecto, este modo está inhabilitado.

Para habilitar el modo SQLCMD, haga clic en la opción Modo SQLCMD en el menú Consulta:

Otra forma de poder disponer del modo SQLCMD es utilizando una combinación de teclas ALT + Q + M utilizando el teclado.

En SSMS, hay una forma para configurar las ventanas de consulta para que se habilitan en el modo SQLCMD de manera predeterminada. Para ejecutarlo, vaya al menú principal de SSMS y en el menú Herramientas escoja el comando Opciones:

Al ejecutar ese comando esto abrirá la ventana de Opciones. De la lista, escoja la ejecución de la consulta -> SQL Server -> General y marque la casilla de verificación “De manera predeterminada, abrir nuevas consultas en modo SQLCMD”:

Por otra parte, cuando se usa el modo SQLCMD, el depurador IntelliSense y Transact-SQL se desactivan en el Editor de consultas del motor de base de datos.

En el modo SQLCMD, se pueden colocar dos tipos de sentencias: la primera es la SQLCMD y la segunda son las sentencias T-SQL.

En el ejemplo a continuación, se incluirán y explicarán algunas de las palabras clave del script SQLCMD:

 :CONNECT ZIVKO\ZIVKO2014
 :OUT C:\Users\Marko\Data.txt

 USE AdventureWorks2014;
 SELECT a.City, a.PostalCode
 FROM Person.Address a

Al ejecutar el código, el resultado en el editor de consultas será:

Los comandos SQLCMD se marcan automáticamente en gris y las sentencias de T-SQL aparecen en forma normal como aparecen en la consulta regular.

La mayoría de los comandos SQLCMD comienzan con dos puntos (:). Para algunos comandos SQLCMD, como QUIT y EXIT, se pueden omitir dos puntos (:).

Por ejemplo, el comando quit funcionará igual que el comando: quit.

Vale aclarar que esto está habilitado debido a la compatibilidad hacia atrás con la utilidad osql.

Es importante indicar que solo un comando SQLCMD puede estar en cada línea. Si aparecen dos o más comandos SQLCMD en una línea:

:connect ZIVKO\ZIVKO2014 :out C:\Users\Marko\Data.txt

Aparecerá el siguiente error:

Ocurrió un error fatal de scripting.
Se encontró una sintaxis incorrecta al analizar: setvar.

: conecte la palabra clave del script SQLCMD

Debido a ello esto crea una conexión a una instancia de SQL Server. Si la instancia es la predeterminada, o si está especificada por el nombre del servidor/instancia, SQLCMD deberá usar la autenticación de Windows para conectarse a SQL Server con una cuenta actual:

:connect (local) or
:connect ZIVKO\ZIVKO2014

Es importante indicar que SQLCMD también permite especificar un nombre de usuario y contraseña cuando se conecta a una instancia. Para poder incluir un nombre de usuario, agregue el modificador -U y luego el nombre de un usuario. Adicionalmente para incluir una contraseña, use el interruptor -P e ingrese una contraseña:

:conecte ZIVKO\ZIVKO2014 -U <usuario> -P <contraseña>

:out SQLCMD script keyword

Este comando nos permite proporcionar una ubicación donde se redirigirán los resultados de la consulta. En este ejemplo, los resultados se redirigirán al archivo Data.txt:

:out C:\Users\Marko\Data.txt

Si se desea cambiar la apariencia de los resultados en el archivo Data.txt, vaya a Herramientas -> Opciones -> Resultados de la consulta -> SQL Server -> Resultados a texto y en el cuadro combinado Formato de salida elija, por ejemplo, la opción delimitada por comas:

Después de ejecutar la misma instrucción T-SQL, el resultado será:

El comando SQLCMD es muy útil cuando necesita ejecutar el mismo código en varias bases de datos o servidores. En el siguiente ejemplo, se puede ver cómo se puede agregar un usuario en varias bases de datos.

Para ello abra un nuevo editor de consultas, cambie al modo SQLCMD (modo QuerySQLCMD) y pegue el siguiente código:

 :setvar username “Marko”
 :setvar login “Zivko”

 EXEC sp_grantdbaccess ‘$(inicio de sesión)’, ‘$(nombre de usuario)’
 IR

Al guardar este código como el archivo User.sql en esta ubicación “C:\User”.

sp_grantdbaccess: tendrá el procedimiento almacenado que agrega un usuario a la base de datos actual..

Palabra clave Setvar script

Ejemplo

:setvar <var> <value>

Por ello esto define las variables sqlcmd. El primer elemento muestra el nombre de la variable sqlcmd (<var>) ay el segundo elemento indica el valor de la variable sqlcmd (<valor>). Es importante indicar que los nombres de variables (<var>) no distinguen entre mayúsculas y minúsculas.

El nombre de la variable no puede tener espacios en blanco. El siguiente nombre de variable sqlcmd:

:setvar nombre de usuario “Marko”

elevará este error:

Ocurrió un error fatal de scripting.
Se encontró una sintaxis incorrecta al analizar: setvar.

Identificador de variable

Ejemplo

$(<var>)

Es importante indicar que el identificador de variable se puede utilizar como nombre de base de datos, nombres de tablas, nombres de columnas, valores en consultas, etc.:

 :setvar Table Person.Person
 :setvar Base de datos AdventureWorks2014
 :setvar Value “FirstName +’ ‘+ LastName AS Name”

 USE $(Database)
 SELECT $(Value) FROM $(Table)

El resultado será:

Es importante indicar que, si el valor de sqlcmd contiene espacios en blanco, los valores deben estar entre comillas:

:setvar Value “FirstName +’ ‘+ LastName AS Name”

De lo contrario aparecerá el siguiente error:

Ocurrió un error fatal de script.
Se encontró una sintaxis incorrecta al analizar: setvar.

Entonces en una nueva ventana de consulta, pegue el siguiente código:

 :setvar SQLFile “User.sql”
 :setvar Error “Errors.txt”
 :setvar Path “C:\User\”
 – – Especifique la ruta del archivo de error.
 :error $(Path)$(Error)

 USE AdventureWorks2014 – – Establecer el nombre de la base de datos
 :r $(Path)$(SQLFile)
 USE Test – – Establecer el nombre de la base de datos
 :r $(Path)$(SQLFile)
 USE Prueba 1– – Establece el nombre de la base de datos
 :r $(Path)$(SQLFile)
 USE [Adventure – Works] – – Establece el nombre de la base de datos
 :r $(Path)$(SQLFile)

Palabra clave del script de error

Ejemplo

:error < nombre de archivo >

Para ello redirija todos los errores que ocurran durante la ejecución al nombre de archivo especificado, en este caso, este será el archivo Errors.txt en esta ubicación C:\User\”.

<nombre de archivo>

Entonces este archivo se crea automáticamente y registra todos los errores que aparecen durante la ejecución del código:

Si este archivo ya existe, se borrará el contenido de la sesión anterior.

:r < nombre de archivo > palabra clave de script

Este comando sqlcmd interpreta la entrada de <nombre_de_archivo>, en este ejemplo, del archivo User.sql y la carga en la memoria caché de la declaración.

Otros comandos SQLCMD

En palabra clave de secuencia de comandos de error

Ejemplo

:on error [exit | ignore] la palabra clave del script

Con este comando sqlcmd, se puede fijar una acción que se realizará cuando se produzca un error.

:en salida de error

Cuando la opción de salida está fijada, sqlcmd sale con un mensaje de error. Si el usuario ya existe en la base de datos y se ejecuta el siguiente código:

 :setvar SQLFile “User.sql”
 :setvar Error “Errors.txt”
 :setvar Path “C:\User\”
 – — Especifique la ruta del archivo de error.
 :error $(Path)$(Error)
 :setvar Report “Report.txt”

 :out $(Path)$(Report)
 :on error exit

 USE AdventureWorks2014 – – Establecer el nombre de la base de datos
 :r $(Path)$(SQLFile)
 USE Test – – Indicar el nombre de la base de datos
 :r $(Path)$(SQLFile)
 USE Prueba 1 – – Indica el nombre de la base de datos
 :r $(Path)$(SQLFile)
 USE [Adventure – Works] – – Indica el nombre de la base de datos
 :r $(Path)$(SQLFile)

el mensaje de error obtenido será:

:on error ignorar

Cuando se define la opción de ignorar, sqlcmd ignora el error y continúa ejecutando el script.

:reiniciar la palabra clave del script

Excluye la memoria caché de la declaración

:quit script keyword

Detiene sqlcmd inmediatamente

:salir de la palabra clave del script

Sale de sqlcmd inmediatamente y no devuelve ningún valor.

::salir () palabra clave de script

Ejecuta el lote, luego sale y no devuelve ningún valor.

::salir (query) script keyword

Ejecuta un lote que incluye la consulta, devuelve los resultados de la consulta y luego se cierra:

 :setvar SQLFile “User.sql”
 :setvar Error “Errors.txt”
 :setvar Path “C:\User\”
 – – Indique la ruta del archivo de error.
 :error $(Path)$(Error)
 :setvar Report “Report.txt”

 :out $(Path)$(Report)
 :exit(Select * from Person.AddressType)

 USE AdventureWorks2014 – – – Define el nombre de la base de datos
 :r $(Path)$(SQLFile)
 USE Test – – Indicar el nombre de la base de datos
 :r $(Path)$(SQLFile)
 USE Prueba 1 – – Define el nombre de la base de datos
 :r $(Path)$(SQLFile)
 USE [Adventure – Works] – – Define el nombre de la base de datos
 :r $(Path)$(SQLFile)

Los resultados en el Report.txt serán:

Marko Zivkovic
168 Views