Compartir vía


Comparación de una base de datos y un proyecto

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance

Comprender las diferencias de definición de objeto entre una base de datos y un proyecto SQL puede proporcionar información valiosa sobre el estado de la base de datos y el proyecto, incluyendo durante el proceso de solución de problemas del desarrollo o la regresión en curso. Los proyectos de SQL incluyen herramientas para visualizar diferencias, analizar los cambios necesarios para actualizar una base de datos, importar los cambios de una base de datos a un conjunto de archivos de proyecto SQL y revisar los scripts de T-SQL que se ejecutarían para actualizar una base de datos para que coincida con el proyecto.

En este artículo se revisan los métodos para comparar una base de datos y un proyecto SQL mediante diferentes enfoques:

  • Puede usar la comparación de esquemas para visualizar las diferencias entre bases de datos y/o proyectos. Esta comparación puede ayudarle a identificar los cambios que deben sincronizarse entre la base de datos y el proyecto.
  • Puede usar un informe de implementación para resumir y automatizar las revisiones de los cambios necesarios para actualizar una base de datos.
  • Puede usar la comparación de esquemas o la extracción de SqlPackage para importar los cambios de una base de datos a un conjunto de archivos de proyecto de SQL.
  • Puede usar el script de implementación SqlPackage o la comparación de esquemas para revisar las instrucciones T-SQL que se ejecutan para actualizar una base de datos para que coincida con el proyecto.

Comparación de esquemas: visualización de diferencias

Requisitos previos

La comparación gráfica de esquemas aún no está disponible en la versión preliminar de proyectos SQL de estilo SDK en Visual Studio. Use Azure Data Studio o Visual Studio para comparar esquemas.

La comparación de esquemas requiere una herramienta gráfica como Visual Studio o Azure Data Studio.

Resumen

La comparación de esquemas proporciona la interfaz más rica visualmente para comprender las diferencias entre una base de datos y un proyecto. Una funcionalidad clave con la comparación de esquema es que la direccionalidad de la comparación es reversible. Como resultado, puede usar la comparación de esquemas para comprender los cambios de un proyecto que se implementarán en una base de datos o los cambios de una base de datos para agregarlos a un proyecto. Puede usar la comparación de esquemas para identificar diferencias en definiciones de objetos, como tablas, vistas, procedimientos almacenados y funciones.

El conjunto completo de diferencias o un subconjunto seleccionado se pueden usar para aplicar los cambios en la base de datos o el proyecto. La comparación de esquemas también puede generar un script de implementación que, cuando se ejecute, aplique eficazmente los cambios a una base de datos.

Obtenga más información sobre la comparación de esquemas en la introducción a la comparación de esquemas.

Informe de implementación: revisión de los cambios

Los informes de implementación requieren la CLI de SqlPackage.

dotnet tool install -g Microsoft.SqlPackage

Resumen

Un informe de implementación proporciona un resumen de los cambios necesarios para actualizar una base de datos para que coincida con un proyecto. La CLI de SqlPackage genera un informe de implementación comparando un modelo de origen (artefacto de compilación o base de datos de proyecto SQL .dacpac) con una base de datos de destino. Por ejemplo, el siguiente comando genera un informe de implementación para una base de datos denominada MyDatabase desde un proyecto SQL denominado MyProject:

dotnet build MyProject.sqlproj
sqlpackage /Action:deployreport /SourceFile:bin/Debug/MyProject.dacpac /TargetConnectionString:{connection string for MyDatabase} /OutputPath:deployreport.xml

El XML generado es una forma simplificada del plan de implementación, que resume las operaciones que se realizarían si se ejecuta una implementación de base de datos. La siguiente lista de operaciones no es exhaustiva:

  • Create
  • Alter
  • Drop
  • Refresh
  • UnbindSchemaBinding
  • UnbindFulltextIndex
  • TableDataMotion
  • SPRename
  • EnableChangeTrackingDatabase
  • DisableChangeTrackingDatabase

Un informe de implementación se puede revisar en un editor de texto o en Visual Studio y tendría un aspecto similar al siguiente:

<?xml version="1.0" encoding="utf-8"?>
<DeploymentReport xmlns="http://schemas.microsoft.com/sqlserver/dac/DeployReport/2012/02">
    <Alerts />
    <Operations>
        <Operation Name="Create">
            <Item Value="[CO].[Products].[IX_Products_CategorySlug]" Type="SqlIndex" />
        </Operation>
        <Operation Name="Alter">
            <Item Value="[CO].[Brands]" Type="SqlTable" />
            <Item Value="[CO].[AddProductImage]" Type="SqlProcedure" />
        </Operation>
        <Operation Name="Refresh">
            <Item Value="[CO].[SelectStarView]" Type="SqlView" />
        </Operation>
    </Operations>
</DeploymentReport>

Se puede usar un informe de implementación para revisar los cambios, así como para supervisar eventos potencialmente de alto impacto, como el movimiento de datos o la creación o eliminación de índices clúster. Estos eventos se enumerarían en el informe de implementación dentro del elemento Alerts.

Una ventaja de la operación XML de implementación del informe es que se puede usar para automatizar la revisión de los cambios necesarios para actualizar una base de datos. El XML se puede analizar y usar para generar un informe o para desencadenar alertas basadas en las operaciones o nombres de objeto enumerados.

Importación de cambios de una base de datos

Como se mencionó en la sección de comparación de esquemas, la comparación de esquemas se puede usar para aplicar cambios de una base de datos a un conjunto de archivos de proyecto SQL. La aplicación de cambios a un proyecto SQL es un escenario común cuando se tiene una base de datos que se desarrolla de forma activa directamente y cuando se usa un proyecto SQL para administrar los objetos de base de datos en el control de código fuente. Completar esta operación manualmente a través de Visual Studio o Azure Data Studio puede llevar mucho tiempo, especialmente cuando la base de datos tiene muchos objetos o cambios esporádicos. En esta sección, se revisa cómo automatizar la extracción de definiciones de objetos de una base de datos en un conjunto de archivos de proyecto SQL.

Requisitos previos

Centrándonos en la automatización, usamos la CLI de SqlPackage para extraer definiciones de objetos de una base de datos en un conjunto de archivos de proyecto SQL. Las plantillas .NET de Microsoft.Build.Sql.Templates se usan para crear un archivo de proyecto SQL, un paso opcional.

# install SqlPackage CLI
dotnet tool install -g Microsoft.SqlPackage

# install Microsoft.Build.Sql.Templates
dotnet new install Microsoft.Build.Sql.Templates

Resumen

El comando de extracción SqlPackage toma una base de datos de origen y genera un modelo de base de datos de salida, ya sea como un archivo .dacpac o como un conjunto de scripts SQL. El comportamiento predeterminado de SqlPackage es generar un archivo .dacpac, pero la propiedad /p:ExtractTarget= se puede usar para especificar un conjunto de scripts SQL. El siguiente comando extrae la base de datos MyDatabase en un archivo de proyecto SQL configurado en la carpeta MyDatabaseProject:

sqlpackage /Action:Extract /SourceConnectionString:{connection string for MyDatabase} /TargetFile:MyDatabaseProject /p:ExtractTarget=SchemaObjectType

Cuando una carpeta está bajo control de código fuente, las definiciones de objetos extraídas mostrarían diferencias en las herramientas de control de código fuente. Usando SqlPackage para generar los archivos y comprobar las diferencias en el control de código fuente, puede automatizar el proceso de importación de cambios de una base de datos en un conjunto de archivos de proyecto SQL.

En una serie de tres comandos, podemos eliminar el conjunto anterior de archivos, extraer la base de datos y comprobar las diferencias en las herramientas de control de código fuente:

rm -rf MyDatabaseProject
sqlpackage /Action:Extract /SourceConnectionString:{connection string for MyDatabase} /TargetFile:MyDatabaseProject /p:ExtractTarget=SchemaObjectType
git status --porcelain | wc -l

La salida es el número de archivos modificados por la última extracción de SqlPackage. La salida del comando git status se puede usar para desencadenar otros pasos de automatización. Si queremos usar este conjunto de archivos como proyecto SQL, podemos usar las plantillas .NET de Microsoft.Build.Sql.Templates para crear un archivo de proyecto SQL en la carpeta MyDatabaseProject:

dotnet new sqlproj -n MyDatabaseProject -o MyDatabaseProject

Revisión de los scripts T-SQL de implementación

Como se mencionó en la sección de comparación de esquemas, la comparación de esquemas se puede usar para generar los scripts de T-SQL necesarios para actualizar una base de datos para que coincida con un proyecto SQL. En esta sección, se revisa cómo usar SqlPackage para automatizar la generación de los scripts de T-SQL necesarios para actualizar una base de datos para que coincida con un proyecto SQL de forma que se puedan almacenar como un artefacto de canalización para su revisión y aprobación.

Requisitos previos

dotnet tool install -g Microsoft.SqlPackage

Resumen

La ejecución de una implementación de proyecto SQL con SqlPackage usa la acción de publicación, pero si estamos buscando revisar los scripts de T-SQL que se ejecutan, podemos usar la acción de script. El comando siguiente genera los scripts de T-SQL necesarios para actualizar una base de datos denominada MyDatabase para que coincida con un proyecto SQL denominado MyProject:

dotnet build MyProject.sqlproj
sqlpackage /Action:Script /SourceFile:bin/Debug/MyProject.dacpac /TargetConnectionString:{connection string for MyDatabase} /DeployScriptPath:Deployment.sql