2008-09-22 28 views

Respuesta

1

no está seguro acerca de la integración con el instalador de ventanas, pero se puede intentar de Red Gate SQL Packager

+0

Puerta Roja tiene algunas herramientas para trabajar con SQL Server ... Yo recomendaría la comprobación hacia fuera. – mattruma

+0

Cuesta dinero. – Shimmy

0

InstallShield le permite ejecutar secuencias de comandos SQL como parte de una instalación. Aunque no lo intenté, ¡solo recuerda que estaba en la GUI la última vez que lo busqué!

0

Es posible que desee buscar en SubSonic migrations. En primer lugar, es una excelente manera de versionar su base de datos. En segundo lugar, no debería ser demasiado difícil descubrir cómo ejecutar exactamente los mismos scripts desde un instalador.

4

En mi experiencia, es mejor hacer actualizaciones de esquemas db cuando su software se conecta a la base de datos, en lugar de al momento de la instalación. Que quiere hacer las siguientes cosas:

  • identificar cada cambio de esquema con un identificador único, como un GUID
  • incluir una lista de todos los cambios que se pueden aplicar con el producto, por ejemplo compilados en un recurso durante su construcción
  • tiene una tabla en la base de datos para mantener una lista de los cambios de esquema que se han aplicado
  • cuando se conecta a la base de datos, escanear esa mesa para ver si los cambios son necesarios

Esto es lo suficientemente sencillo como para hacerlo desde dentro de su código de ejecución, pero no tan fácil de hacer en su instalador.

+0

Y si dos usuarios ejecutan la aplicación al mismo tiempo, y ambos intentan aplicar la actualización ...? – Matt

+0

Hay algunas maneras de manejar eso. Lo manejo escribiendo cada cambio de db para que sea completamente idempotente; hay un montón de código como "if column_exists = 0 luego agrega una columna". También podría tener un bit público de 'actualizaciones en progreso' en alguna parte. –

+0

Algunos motores de base de datos, como SQL Server, permiten ejecutar las actualizaciones como parte de una transacción, que se ocupará de garantizar la coherencia de los datos si varios usuarios ejecutan la actualización en paralelo (el segundo usuario debe terminar con algunos errores, lo que provoca un retroceso). – Lucero

0

Creo que tiene para cada versión de su software un montón de actualizaciones de bases de datos. ¿Por qué no escribe estas actualizaciones como una instrucción T-SQL, para ser probado, ejecutado cuando se lanza por primera vez la nueva versión de su software? Simplemente abra la conexión a su base de datos desde su software y envíe las instrucciones DDL como lo haría con cualquier instrucción SELECT o UPDATE. También haría algo similar a lo que propone Jack Paulsen: mantener una lista de estas instrucciones T-SQL con un doble sistema de identificación: una vinculada a la base de datos/versión de software a la que se aplica (puede ser uniqueIdentifier), otra (número) a mantener las instrucciones en un orden serial (véase mi ejemplo: la instrucción 2 no puede ser ejecutada antes de la instrucción 1)

ejemplo:

//instruction 1, batch instructions for version#2.162 
USE myDatabase 
GO 
ALTER TABLE myTable 
    ADD myColumn uniqueIdentifier Null 
GO 
//instruction 2, batch instructions for version#2.162 
USE myDatabase 
ALTER TABLE myTable 
    ADD CONSTRAINT myTable_myColumn FOREIGN KEY (myColumn) ... 
GO 

Para una descripción completa de ALTER, DROP y CREATE instrucciones, consulte la T- Ayuda de SQL Solo tenga cuidado suficiente para (por ejemplo) borrar Índices y Restricciones vinculados a un campo antes de eliminar ese campo.

Puede añadir, por supuesto, algunas instrucciones de actualización adicionales para calcular los valores de las columnas añadidas, etc.

Incluso se puede pensar en algo más complicado, comprobando si los pasos anteriores de mejora (que llevaron a la versión de base de datos # 2.161) fueron ejecutados correctamente.

Mi consejo: mientras escribe estas instrucciones de T-SQL, mantenga también el rastro de sus "homólogos", para que pueda en cualquier momento (tiempo de depuración por ejemplo) degradar la estructura de su base de datos a la versión anterior.

2

Adam Cogan recomienda crear una tabla de parches que se utiliza para registrar cada actualización más allá de su versión inicial. En lugar de cambiar su esquema a través de SSMS o Enterprise Manager, asegúrese de realizar un script de cada cambio ... ambas aplicaciones le permiten programar sus cambios y luego no aplicarlos. Guarde los scripts en los archivos (probablemente los agregue como recursos) y luego simplemente revise la tabla de parches cada vez que ejecute la aplicación.

Adam tiene algunas reglas de mejores bases de datos SQL aquí

http://www.ssw.com.au/ssw/Standards/Rules/RulesToBetterSQLServerDatabases.aspx

Cuestiones relacionadas