En SQL Server Management Studio, ¿qué es el modo SQLCMD?

En SQL Server Management Studio, me gustaría saber qué es el modo SQLCMD.

preguntado el 01 de febrero de 12 a las 14:02

Consulte nuestra página El banco de trabajo SQLCMD para ver algunos ejemplos en los que esto es útil. -

4 Respuestas

Investigué un poco más, así que aquí está mi comprensión de esto para extender lo que se ha escrito hasta ahora:

¿Qué es SQLCMD?

SQLCMD.exe es una utilidad de consola incluida en la instalación de SQL Server 2005 y superior. Por lo general, puede encontrarlo en una ruta como c:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE.

Es un entorno de scripting simple que permite la automatización de tareas relacionadas con el servidor SQL. Por ejemplo, puede escribir y ejecutar una secuencia de comandos que iniciará sesión en una instancia específica de SQL Server, ejecutará secuencias de comandos desde un directorio determinado en esta conexión y almacenará la salida en un archivo específico.

Invoke-Sqlcmd cmdlet se introdujo con SQL Server 2008 como un medio para reemplazar esta herramienta con un enfoque estandarizado basado en Powershell, preservando la mayor parte de la sintaxis y funcionalidad originales.

¿Qué es el modo SQLCMD en SSMS?

En SSMS, Modo SQLCMD es un modo de ejecución de script que simula el entorno sqlcmd.exe y, por tanto, acepta algunos comandos que no forman parte del lenguaje T-SQL. diferente a sqlcmd.exe, contacta con la base de datos usando SqlClient (de la misma manera que SSMS), no ODBC proveedor de datos, por lo que en algunos aspectos puede tener un comportamiento diferente al sqlcmd.exe.

La ejecución de scripts en modo SQLCMD permite utilizar comandos típicos de sqlcmd.exe medio ambiente. Sin embargo, no hay IntelliSense ni soporte de depuración para el modo SQLCMD, por lo que mantener scripts que combinen T-SQL limpio con código específico de SQLCMD puede ser complicado. Por lo tanto, debe usarse solo cuando sea necesario.

Caso de uso de ejemplo

Supongamos que una empresa tiene una convención de nomenclatura para las bases de datos que incluyen entorno en el nombre, por ejemplo: MyDb_Aguijón, MyDb_Lista, MyDb_Dev. Esta convención podría usarse para minimizar la posibilidad de errores.

Cuando un desarrollador escribe un script T-SQL, tendrá que ejecutarse en diferentes entornos en el proceso de implementación / prueba, lo que requeriría muchas versiones del código:

 SELECT *
 FROM [MyDb_Dev].[dbo].[MyTable1] -- MyDb_Dev -> MyDb_Test -> MyDb_Prod

En su lugar, podemos asumir que el nombre de la base de datos se proporcionará como una variable SQLCMD en el proceso de implementación y que se implementará exactamente el mismo archivo en todos los entornos:

 -- :setvar databaseName "MyDb_Dev" -- uncomment for testing in SSMS

 SELECT *
 FROM [$(databaseName)].[dbo].[MyTable1]

(en este ejemplo simple, el nombre de la base de datos podría omitirse por completo, pero si tiene uniones entre bases de datos, es necesario usar el nombre de la base de datos)

Respondido el 26 de diciembre de 15 a las 23:12

Gracias, @buli. Esta respuesta es la única que explica por qué alguien que normalmente usa solo TSQL en SSMS podría optar por crear y ejecutar un script SQLCMD. - BradC

Un caso de uso que estoy considerando: para los grupos de disponibilidad, por supuesto, está trabajando con varios servidores. Debería ser posible escribir T-SQL para consultar las tablas del sistema para obtener información sobre el estado del AG, pero esto requiere que se conecte a cada réplica por separado y la consulte. Una réplica determinada puede proporcionarle los nombres de todas las réplicas del grupo, por lo que debería poder ejecutar un script en cualquier réplica, obtener una lista de todas las réplicas y luego realizar consultas de verificación de estado en cada réplica de forma dinámica sin codificar los nombres del servidor. . - puedes intentar alcanzarme

Exactamente como suena.

Es un modo que le permite crear scripts SQLCMD.

Desde MSDN: Edición de scripts SQLCMD con el editor de consultas:

Para utilizar el Editor de consultas del motor de base de datos para escribir o editar scripts SQLCMD, debe habilitar el modo de scripts SQLCMD.

En SQL Server Management Studio, configure esto a través del menú Consulta (Consulta -> Modo SQLCMD).

Respondido el 14 de Septiembre de 15 a las 18:09

Obviamente no fui yo, pero muchos recursos no son reales sobre la diferencia entre usar SQLCMD y simplemente ejecutar algunas declaraciones T-SQL dentro de Management Studio. Un script de conversión que Visual Studio generó para mí la semana pasada hace una verificación para ver si SQLCMD está habilitado y se niega a ejecutarse si no lo está, y parece haber una opción para habilitarlo / deshabilitarlo en el menú Consulta para Management Studio. Así que hay una diferencia, pero muchos recursos básicamente dicen que SQLCMD es este gran y maravilloso dispositivo que le permite ejecutar sentencias T-SQL y lotes y dejarlo así. - Panzercrisis

Esta respuesta explica SQLCMD mediante el uso de SQLCMD y básicamente no es mucho más que un enlace a MSDN. Entonces no ayuda. - mago

E incluso ese enlace a MSDN no explica en absoluto por qué alguien podría optar por utilizar un script SQLCMD en lugar de simplemente TSQL. Simplemente explica la mecánica y la sintaxis de la edición. - BradC

Re. "E incluso ese enlace a MSDN no explica en absoluto por qué alguien podría optar por utilizar un script SQLCMD en lugar de solo TSQL": La segunda frase del artículo enlazado (al menos la versión actual "2/03/14" si no, también la versión cuando está vinculada) dice "por qué" - "Usas scripts SQLCMD cuando tienes que procesar comandos del sistema Windows y sentencias Transact-SQL en el mismo script". - tom

"Utiliza scripts SQLCMD cuando tiene que procesar comandos del sistema Windows y sentencias Transact-SQL en el mismo script".

"De forma predeterminada, el modo SQLCMD no está habilitado en el Editor de consultas. Puede habilitar el modo de secuencias de comandos haciendo clic en el icono Modo SQLCMD en la barra de herramientas o seleccionando Modo SQLCMD en el menú Consulta".

Referencia: MSDN

Respondido el 09 de diciembre de 14 a las 21:12

más significativo y detallado que la solución. - Jeb50

Mensaje Transact-SQL IntelliSense no está activo para este editor porque el editor está en modo SQLCMD.

Estaba publicando SQL Server Project desde Visual Studio en la base de datos para sincronizar los cambios y obtuve un error arriba. La publicación estaba fallando. Cerré todos los archivos abiertos en VS y resolvió el problema.

Espero que el ejemplo de la vida real explique por qué la gente usa el modo SQLCMD.

contestado el 02 de mayo de 20 a las 12:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.