A outra opção de controle de versão é o "change script". Em vez de armazenar os próprios objetos de banco de dados, você armazena a lista dos passos necessários para criar os objetos de banco de dados. O que eu usei com sucesso no passado é o Liquibase, mas todos funcionam da mesma forma.
A principal vantagem da ferramenta de change script (alteração de script) é ter o controle total do script e ver o resultado no final da migração. Isso facilita a execução de alterações complexas, como das tabelas quando são divididas ou combinadas.
Infelizmente, existem várias desvantagens nesse estilo de controle de versão. A primeira é a necessidade de escrever as alterações dos scripts. Você terá mais controle, só que consome muito tempo. É muito mais fácil adicionar uma propriedade a uma classe C# do que escrever o script ALTER TABLE manualmente..
Isso se torna ainda mais problemático ao trabalhar com coisas como SchemaBinding. Para quem não está familiarizado com o termo, isso habilita alguns recursos avançados do SQL Server, bloqueando o schema da tabela. Se você fizer alterações no design de uma tabela ou view, primeiro remova o SchemaBinding de qualquer view que toque na tabela ou view. E se essas views forem vistas pelo schema-bound e por outras views, também é necessário desconectá-las temporariamente. Todo esse clichê, embora seja fácil gerar com uma ferramenta whole-schema de controle de versão, e é difícil de se executar manualmente.