¿Existe un concepto de un "archivo de inclusión" en SQL Server?


19

Tengo un conjunto de scripts que deben ejecutarse en un cierto orden. Me gustaría crear un "archivo maestro" que enumere todos los otros archivos y su orden correcto. Básicamente, como un archivo de inclusión de C ++ o ASP / VBScript.

Respuestas:


19

Si está utilizando SQLCMD , puede usar :r FileNamepara incluir un archivo .sql separado.

: r FileName

Analiza sentencias T-SQL adicionales y comandos SQLCMD del archivo especificado por FileName en el caché de sentencias. FileName se lee en relación con el directorio de inicio de Visual Studio. El archivo se lee y se ejecuta después de encontrar un terminador por lotes. Puede emitir múltiples: r comandos. El archivo puede incluir cualquier comando SQLCMD, incluido el terminador por lotes que se define en Herramientas, Opciones. Puede usar: r en un script previo o posterior al despliegue para incluir otros scripts.


¿Estás usando esta función tú mismo?
bernd_k

Lo estoy usando mucho en proyectos de herramientas de datos de SQL Server. Realmente ayuda cuando intento organizar los datos de muestra que se ejecutan como un script de publicación.
Jonathan Allen el

4

En el sentido de los antiguos preprocesadores C definitivamente no

  • T-SQL por sí solo no tiene ese concepto
  • sqlcmd y sqlcmdmode de SSMS no manejan rutas de archivos relativas
  • sqlcmd y sqlcmdmode de SSMS no admiten condicional incluyendo

Si tiene un conjunto de archivos con rutas absolutas dadas, que desea incluir en un orden incondicional, puede usar la herramienta de línea de comando sqlcmd o usar SSMS en sqlcmdmode como lo mencionan @mfredrickson y @Marian.


Pero si desea rutas relativas o inclusiones condicionales, debe usar un contenedor que llame a sqlcmd (o uno de sus predecesores obsoletos isql u osql).

Actualmente en mi trabajo en esta situación, estoy revisando y extendiendo vbs antiguos y código hta. No estoy completamente feliz, pero es una decisión pragmática. Está funcionando y el usuario final está en casa con la hta GUI y no se requiere instalación de software adicional.

Para un diseño nuevo, comenzaría a pensar en usar WPF y PowerShell para ajustar las llamadas de sqlcmd, pero con nuestros clientes actuales no puedo presumir la presencia de PowerShell V2.

Incluso en épocas anteriores, escribimos lotes simples de cmd para este propósito, algunos de ellos todavía en uso.

Supongo que hay herramientas actuales, especialmente aquellas dirigidas a flujos de trabajo, que podrían ser adecuadas aquí. No estoy familiarizado con eso.


3

Junto con el modo SQLCMD en Management Studio, también puede usar un archivo por lotes para usarlo como archivo maestro para organizar y llamar a todos sus archivos sql utilizando la utilidad SQLCMD .

El modo SQLCMD es una simulación del uso de la utilidad dentro del Management Studio, por lo que no hay una gran diferencia entre los modos. Excepto que a veces prefiero ejecutar lotes (no más apertura de M Studio ... cargando db correcto ... etc.). Prefiero configurar todo en el lote, incluidos los archivos de salida.


2

Estoy de acuerdo, un preprocesador T-SQL es muy necesario. Desarrollé el mío en C #, lo que me llevó como una hora. Además del control sobre el orden de ejecución de los scripts SQL, también me permite tener macros que parecen UDF escalares y son convenientes de usar, pero funcionan tan rápido como los UDF en línea.


+1: he hecho ese tipo de cosas con herramientas de plantillas en varias ocasiones. Aunque sqlcmd tiene algunas facilidades para la sustitución de variables, le daría un beso en la parte inferior a alguien que implementó un complemento de preprocesador macro decente para SSMS.
Preocupado por

1
@AK, ¿te importaría elaborar un poco más sobre esto? ¿Quizás publicar algún código en github?
craig

2

Me gusta la respuesta de bernd_k . Dependiendo de cómo nombró sus scripts, como incluir un número, SQL Server PowerShell (SQLPS) podría usarse si estuviera ejecutando SQL Server 2008 o superior. Entonces, incluso si estuviera utilizando SQL 2005, podría utilizar PowerShell y SMO para 2005.

Nota al margen: creo que SQLCMD finalmente se incluirá en la lista depreciada y se reemplazará con SQLPS, PowerShell.

También hay algunas otras opciones.

  1. Configure cada script como un paso en un trabajo del Agente SQL. Puede establecer el orden en que se ejecutan.
  2. Cree un paquete SSIS para llamar a cada archivo. Esto puede ofrecer un poco más de control y ofrecer un poco más de opciones de registro. Me gusta este método si el resultado de un script necesita ser verificado antes de que se ejecute el siguiente.

No creo que SQLCMD se depreciará porque es vital para el funcionamiento de las herramientas de datos de SQL Server y los DACPAC.
Jonathan Allen el

@ JonathanAllen Si encuentra alguna documentación actual que muestre la administración de DACPAC utilizando, SQLCMDhágamelo saber, porque la mayor parte de lo que encuentro es hacer referencia a PowerShell . Tampoco veo la referencia donde sqlcmdse usa con SSDT, excepto tal vez para la comparación de esquemas, pero nunca uso los scripts generados.
Shawn Melton

Las secuencias de comandos SSDT son secuencias de comandos sqlcmd. Así es como maneja los parámetros, tanto definidos por el usuario como cosas como el nombre de la base de datos. Si desea implementar el DACPAC utilizando SqlPackage.exe, este enlace muestra cómo pasar parámetros sqlcmd. msdn.microsoft.com/en-us/…
Jonathan Allen
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.