Поделиться через


Сравнение базы данных и проекта

Применимо к:SQL ServerБаза данных Azure SQLУправляемый экземпляр Azure SQLБаза данных SQL в предварительной версии Microsoft Fabric

Понимание различий в определении объектов между базой данных и проектом SQL может предоставить ценные сведения о состоянии базы данных и проекта, в том числе во время текущей разработки или регрессии устранения неполадок. Проекты SQL включают средства для визуализации различий, анализа изменений, необходимых для обновления базы данных, импорта изменений из базы данных в набор файлов проекта SQL и проверки скриптов T-SQL, которые будут выполняться для обновления базы данных для сопоставления проекта.

В этой статье рассматриваются методы сравнения базы данных и проекта SQL с помощью различных подходов:

  • С помощью схемы можно визуализироватьразличия между базами данных и (или) проектами. Это сравнение поможет определить изменения, которые необходимо синхронизировать между базой данных и проектом.
  • Отчет о развертывании можно использовать для суммирования и автоматизации проверок тех изменений, необходимых для обновления базы данных.
  • Вы можете использовать сравнение схем или извлечение SqlPackage для импорта изменений из базы данных в набор файлов проекта SQL.
  • Вы можете использовать скрипт развертывания SqlPackage или сравнение схем для просмотра инструкций T-SQL, выполняемых для обновления базы данных в соответствии с проектом.

Сравнение схем: визуализация различий

Prerequisites

Сравнение графических схем пока недоступно в предварительной версии проектов SQL в стиле ПАКЕТА SDK в Visual Studio. Используйте Azure Data Studio или Visual Studio для сравнения схем.

Для сравнения схем требуется графический инструмент, например Visual Studio, или расширение MSSQL для Visual Studio Code.

Summary

Сравнение схем предоставляет визуальный интерфейс для понимания различий между базой данных и проектом. Ключевая возможность сравнения схем заключается в том, что направление сравнения является обратимым. В результате можно использовать сравнение схем, чтобы понять изменения из проекта, которые будут развернуты в базе данных или изменения из базы данных для добавления в проект. С помощью схемы можно определить различия в определениях объектов, таких как таблицы, представления, хранимые процедуры и функции.

Полный набор различий или выбранного подмножества можно использовать для применения изменений к базе данных или проекту. Сравнение схем также может создать скрипт развертывания, который при выполнении эффективно применяет изменения к базе данных.

Дополнительные сведения о сравнении схем см. в обзоре сравнения схем.

Публикация отчета: рассмотрение изменений

Для развертывания отчетов требуется интерфейс командной строки SqlPackage.

dotnet tool install -g Microsoft.SqlPackage

Summary

Отчет о развертывании содержит сводку изменений, необходимых для обновления базы данных в соответствии с проектом. Интерфейс командной строки SqlPackage создает отчет развертывания, сравнивая исходную модель (.dacpac артефакт сборки проекта SQL или базу данных) с целевой базой данных. Например, следующая команда создает отчет развертывания для базы данных с именем MyDatabaseMyProjectиз проекта SQL:

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

Созданный XML-код — это упрощенная форма плана развертывания, сводка операций, которые будут выполняться при запуске развертывания базы данных. Следующий список операций не является исчерпывающим.

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

Отчет о развертывании можно просмотреть в текстовом редакторе или в Visual Studio и выглядеть следующим образом:

<?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>

Отчет о развертывании можно использовать для просмотра изменений, а также отслеживания потенциально важных событий, таких как перемещение данных или кластеризованный индекс создания и удаления. Эти события будут перечислены в отчете о развертывании в элементе Alerts .

Преимущество операции XML отчета развертывания заключается в том, что ее можно использовать для автоматизации проверки изменений, необходимых для обновления базы данных. XML можно проанализировать и использовать для создания отчета или активации оповещений на основе указанных операций или имен объектов.

Импорт изменений из базы данных

Как упоминалось в разделе сравнения схем, сравнение схем можно использовать для применения изменений из базы данных в набор файлов проекта SQL. Применение изменений к проекту SQL — это распространенный сценарий, когда у вас есть база данных, которая активно разрабатывается непосредственно, и проект SQL используется для управления объектами базы данных в системе управления версиями. Выполнение этой операции вручную с помощью Visual Studio или Azure Data Studio может занять много времени, особенно если база данных имеет множество объектов или нерегулярных изменений. В этом разделе мы рассмотрим, как автоматизировать извлечение определений объектов из базы данных в набор файлов проекта SQL.

Prerequisites

Благодаря автоматизации мы используем интерфейс командной строки SqlPackage для извлечения определений объектов из базы данных в набор файлов проекта SQL. Шаблоны .NET Microsoft.Build.Sql.Templates используются для создания файла проекта SQL; это необязательный шаг.

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

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

Summary

Команда извлечения SqlPackage принимает исходную базу данных и создает выходную модель базы данных в виде файла или в виде .dacpac набора скриптов SQL. SqlPackage по умолчанию создает .dacpac файл, но /p:ExtractTarget= это свойство можно использовать для указания набора скриптов SQL. Следующая команда извлекает базу данных MyDatabase в файл проекта SQL, заданный в папке MyDatabaseProject:

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

Если папка находится под управлением системой контроля версий, то определения извлеченных объектов будут показывать различия в инструментах контроля версий. С помощью SqlPackage для создания файлов и проверки различий в системе управления версиями можно автоматизировать процесс импорта изменений из базы данных в набор файлов проекта SQL.

В серии трех команд можно удалить предыдущий набор файлов, извлечь базу данных и проверить различия в инструментах управления версиями:

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

Выходные данные — это количество файлов, которые были изменены последним извлечением SqlPackage. Выходные данные команды git status можно использовать для запуска других шагов автоматизации. Если мы хотим использовать этот набор файлов в качестве проекта SQL, мы можем использовать шаблоны Microsoft.Build.Sql.Templates .NET для создания файла проекта SQL в папке MyDatabaseProject:

dotnet new sqlproj -n MyDatabaseProject -o MyDatabaseProject

Проверка сценариев развертывания T-SQL

Как упоминалось в разделе сравнения схем, сравнение схем можно использовать для создания скриптов T-SQL, необходимых для обновления базы данных для сопоставления проекта SQL. В этом разделе мы рассмотрим, как использовать SqlPackage для автоматизации создания скриптов T-SQL, необходимых для обновления базы данных в соответствии с проектом SQL, таким образом, что их можно хранить в качестве артефакта конвейера для проверки и утверждения.

Prerequisites

dotnet tool install -g Microsoft.SqlPackage

Summary

При выполнении развертывания SQL-проекта с помощью SqlPackage используется действие publish, но если мы хотим проанализировать выполняемые скрипты T-SQL, мы можем использовать действие script. Следующая команда создает скрипты T-SQL, необходимые для обновления базы данных с именем MyDatabase для соответствия SQL проекту с именем MyProject.

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