Estou tentando obter o SQLPackage para comparação de esquema trabalhando na linha CMD. Tem que comparar um master db com 300 live dbs. Todos os SQL 2014 e nenhum registrado como aplicativos da camada de dados. PowerShell e ferramentas de terceiros não são uma opção no momento.
Eu segui os scripts na primeira resposta aqui: https://stackoverflow.com/questions/20673516/command-line-api-for-schema-compare-in-ssdt-sql-server-database-project
Posso criar com êxito arquivos .DACPAC de minha origem e meus destinos.
Se eu adicionar alguns objetos (1 tabela, 3 visualizações) ao banco de dados "Test_B", o script de comparação não mostrará essas diferenças quando eu comparar o mestre com o próprio banco de dados ou com o .dacpac que foi gerado. MAS, se eu executar uma comparação de esquema SSDT do VS, ele os selecionará e criará um script .sql com as instruções DROP esperadas.
Então a pergunta: O que estou fazendo de errado na linha cmd que o Visual Studio/SSDT está fazendo certo? Faltou um parâmetro? Ordem errada das coisas?
#Compare DACPACs
sqlpackage.exe /a:Script /sf:C:\Users\hillke4\Documents\SQLScripts\DACPACS\ACACalculationDB.JTA.v7.master.dacpac /tf:C:\Users\hillke4\Documents\SQLScripts\DACPACS\ACACalculationDB.JTA.v7.Test_B.dacpac /tdn:ACACalculationDB.JTA.v7.Test_B /op:C:\Users\hillke4\Documents\SQLScripts\DACPACS\Deltas\ACACalculationDB.JTA.v7.Test_B.sql
#Compare master dacpac to database
sqlpackage.exe /a:Script /sf:C:\Users\hillke4\Documents\SQLScripts\DACPACS\ACACalculationDB.JTA.v7.master.dacpac /tsn:US1213113W1\SQL2014 /tdn:ACACalculationDB.JTA.v7.Test_B /op:C:\Users\hillke4\Documents\SQLScripts\DACPACS\Deltas\ACACalculationDB.JTA.v7.Test_B.sql
O problema é que as opções de implantação padrão ao usar as ações Script ou Implantar são configuradas para evitar a queda de objetos e minimizar o risco de perda de dados. O Schema Compare, por outro lado, é direcionado para um modo interativo onde as ações (Adicionar, Excluir, Atualizar) são muito mais claras para que isso não ocorra. Para gerar a sintaxe Drop conforme o esperado, adicione a propriedade mostrada abaixo (da documentação do SqlPackage.exe ) à sua chamada.
Propriedade : /p:DropObjectsNotInSource= {True | Falso}
Padrão : Falso
Descrição : especifica se os objetos que não existem no arquivo de instantâneo do banco de dados (.dacpac) serão descartados do banco de dados de destino quando você publicar em um banco de dados.