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

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

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

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

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

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

Необходимые компоненты

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

Для сравнения схем требуется графическое средство, например Visual Studio или Azure Data Studio.

Итоги

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

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

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

Развертывание отчета: проверка изменений

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

dotnet tool install -g Microsoft.SqlPackage

Итоги

Отчет о развертывании содержит сводку изменений, необходимых для обновления базы данных в соответствии с проектом. Интерфейс командной строки SqlPackage создает отчет развертывания, сравнивая исходную модель (.dacpac артефакт сборки проекта SQL или базу данных) с целевой базой данных. Например, следующая команда создает отчет развертывания для базы данных с именем MyDatabase MyProjectиз проекта 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.

Необходимые компоненты

Благодаря автоматизации мы используем интерфейс командной строки 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

Итоги

Команда извлечения 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, таким образом, что их можно хранить в качестве артефакта конвейера для проверки и утверждения.

Необходимые компоненты

dotnet tool install -g Microsoft.SqlPackage

Итоги

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

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