database - tablas - sql server data tools 2012
Línea de comandos/API para la comparación de esquemas en el proyecto de base de datos de SSDT SQL Server? (4)
En Visual Studio 2012, tenemos Schema Compare
en el SQL Server Database Project
(DbProject) de SSDT que ayuda
- Comparar la
source
target
- Actualizar
target
para que sea el mismo que el desource
Dónde
- El origen y el destino pueden ser una base de datos, un proyecto DbProject o un archivo .dacpac
- La actualización se puede realizar a través de una acción de actualización o un script generado
Mi pregunta es: ¿es posible tener y dónde puedo obtener la interfaz de línea de comandos / API para llamar a esta función?
¿Has mirado SqlPackage ?
En la actualidad, la única forma de obtener acceso de la API a los resultados de comparación de esquemas es escribir un modificador / ejecutor del plan de implementación que se ejecute durante una operación de implementación / script en la API de DacServices. Esto le permite examinar el plan de implementación generado al comparar un dacpac con una base de datos, pero también le da acceso a ModelComparisonResult que representa una operación de comparación de esquema, que está disponible en el objeto de contexto que se pasa al método OnExecute de un colaborador. Acabo de escribir una entrada de blog que cubre este proceso y podría ser útil para usted. Mire eso y, con suerte, le ayudará a comenzar.
Escribí algunas líneas sobre este tema hace un tiempo. Esperemos que te sean útiles.
En pocas palabras, la herramienta que está buscando es vsdbcmd.exe
, que se distribuye por las versiones Ultimate y Premium de Visual Studio.
FUENTE Base de datos sqlpackage.exe / a: Extraer / scs: Servidor =% Servidor%; Base de datos = AspBaselineDB; /tf:%DriveSpec%/%DacPath%/%AspBaselineDB%_baseline.dacpac
TARGET Database sqlpackage.exe / a: Extraer / scs: Servidor =% Servidor%; Base de datos =% AspTargetDB-2%; /tf:%DriveSpec%/%DacPath%/%AspTargetDB%.dacpac
COMPARAR Y GENERAR el script del Delta sqlpackage.exe / a: Script /sf:%DriveSpec%/%DacPath%/%AspBaselineDB%_baseline.dacpac /tf:%DriveSpec%/%DacPath%/AspNetDb/%AspTargetDB%.dacpac : aspTargetdb /op:%DriveSpec%/%SqlPath%/AspNetDb/AspDbUpdate.sql
Ejecute el script sqlcmd.exe -S% Server% / aspnetdbAmexDev -i% DriveSpec% /% SqlPath% / AspNetDb / AspDbUpdate.sql
Hago esto en los scripts de CMD ya que nuestro departamento de TI no permitirá los scripts de PowerShell sin firmar y no comprarán un certificado. Esto funciona perfectamente, incluso cuando lo llama desde TFS 2012 Team Builds o simplemente ejecuta la secuencia de comandos .CMD desde un indicador de comandos de VS como administrador.
¡Nota!
Agregue el siguiente SET en su script: SET PATH =% PATH%; C: / Archivos de programa (x86) / Microsoft SQL Server / 110 / DAC / bin
También: como se puede ver yo establezco variables de ruta. Hago esto porque estoy tocando hasta 50 tipos de la base de datos y esta es la única forma coherente que he encontrado para generar scripts delta y actualizar nuestras bases de datos DEV y TEST.