Gestión de parches / versiones para bases de datos externas

Actualmente desarrollo software (.NET WinForms) para clientes empresariales. Mis clientes alojan su database MS-SQL para mi aplicación internamente (en las instalaciones) y no tengo acceso a ella. Esto ha significado que tuve que volver a pensar en mi enfoque para la administración de parches.

Anteriormente, cuando desarrollé aplicaciones en las que alojo la database de producción en mi propia infraestructura, simplemente realizaba todos mis cambios en un entorno DEV y utilizaba una herramienta como SQL Compare para evaluar los cambios entre DEV y PROD y generar un script de cambio . Como no tengo acceso a las bases de datos de mis clientes (y podrían estar en versiones diferentes también), este enfoque no funcionará.

Actualmente, mi enfoque es registrar manualmente todos los cambios que realizo en mi entorno DEV en un file de script de cambio de SQL. Cada versión contendrá uno de estos scripts. Cuando el cliente instala la actualización de software, comtesting una tabla 'patch_history' en la database, la compara con una carpeta de scripts de parches SQL e identifica los nuevos parches que deben aplicarse (en order).

Estoy experimentando los siguientes desafíos con este enfoque:

Tengo que recorrer manualmente todos mis scripts de cambios anteriores para encontrar el código más nuevo para un procedimiento almacenado o una tabla en particular, para asegurarme de que estoy haciendo hincapié en la última versión. Un desarrollador puede olvidarse de include un cambio que realizaron en el entorno DEV en el file de parche SQL. La cantidad de parches que deben aplicarse está creciendo rápidamente. Si un nuevo cliente instala una instancia nueva, tiene una gran cantidad de scripts de cambio para aplicar después. No es necesariamente un problema por el momento, pero puede convertirse en un problema de performance en el futuro. También se siente ineficiente (es decir, scripts de cambio que pueden estar creando tablas / SP que se eliminan inmediatamente mediante un script de cambio posterior). ¿Alguien más ha encontrado una buena solución que funcione bien para ellos en un entorno similar?

Gracias de antemano por cualquier consejo.