¿Cómo llenas tu base de datos con datos estáticos controlados por código fuente usando un proyecto de base de datos de Visual Studio? He intentado las tres estrategias a continuación, encontrando que cada una es progresivamente mejor que la anterior. Estoy usando pero no estoy completamente satisfecho con la estrategia 3. ¿Tienes otra alternativa?¿Práctica recomendada para rellenar datos estáticos con un proyecto de base de datos de Visual Studio 2010?
Coloque scripts de inserción en la carpeta "Planes de generación de datos". Haga referencia a los scripts en el archivo "Script.PostDeployment.sql" para incluirlos en el proceso de implementación.
- ventaja: recta de avance
- inconveniente: muuuuy lento
- inconveniente: se despliega subsiguientes deben eliminar primero los datos estáticos o detectar la no existencia de datos => ineficienteinsertar los datos en la base de datos la primera vez utilizando el método más conveniente (por ejemplo, podría ser la función de tabla de edición SSMS). Extraiga esos datos utilizando la utilidad de línea de comandos de bcp para crear un grupo de archivos de datos y agréguelos a su proyecto. Cree una secuencia de comandos a la que se hace referencia en el archivo "Scripts.PostDeployment.sql" que ejecuta una instrucción de "inserción masiva" para cada archivo de datos.
- ventaja: mucho más rápido que las declaraciones de inserción
- ventaja: puede aprovechar SSMS utilidad de tablas de edición
- inconveniente: cada declaración inserción masiva requiere un nombre de archivo completo para el archivo de datos de modo que si los archivos de datos están ubicados en mi máquina en "C: \ Projects \ Dev \ Source \ foo.dat", entonces el equipo de desarrollo remoto también debe tenerlos en esa ubicación o la instrucción de inserción masiva falla
- drawback: debe eliminar los datos estáticos existentes antes ejecución de instrucciones de inserción masiva en despliegues posterioresCree tablas temporales durante la implementación para contener los datos estáticos d use la instrucción de fusión sql para sincronizar estas tablas con las tablas de destino. Ver either de these publicaciones en el blog.
- ventaja: que parece mezcla de SQL tiene la semántica perfectas para el problema
- inconveniente: la lógica de esta estrategia se repite en cada archivo - inconveniente: definiciones de las tablas se repiten en forma de tablas temporales en el sql combinar archivos
¿existe una estrategia alternativa superior? Dejé la estrategia 1 porque era demasiado lenta. No me gusta la estrategia 2 debido al problema del nombre de archivo completo. Estoy satisfecho pero no emocionado con la estrategia 3. ¿Existe una mejor práctica?
¿Tiene la opción de dejar los datos en la base de datos de destino, en lugar de volver a poblar cada vez? –
@David: No creo que exista tal opción a menos que alguien me diga lo contrario. Tiene que ser parte de la solución guionizada de alguna manera. La estrategia 3 maneja esto con el comando de fusión. La estrategia 1 tendría que modificarse para verificar primero si los datos existen antes de insertarlos. Del mismo modo para la estrategia 2. –
Probablemente no sea un consuelo para usted, pero acabamos de lanzar SQL Source Control 2, que tiene Static Data Support. Lamentablemente, esto no es compatible con el proyecto de base de datos - Todavía no, al menos. Sin embargo, estamos considerando seriamente esto. Si está interesado, vote aquí: http://redgate.uservoice.com/forums/39019-sql-source-control/suggestions/1010465-work-with-a-visual-studio-2010-database- project? ref = title –