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


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

Применимо к: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. Используйте Visual Studio Code или Visual Studio для сравнения схем.

Сравнение схем доступно в Visual Studio или с помощью расширения MSSQL для Visual Studio Code.

Сравнение схем доступно в 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 или Visual Studio Code может занять много времени, особенно если база данных имеет множество объектов или нерегулярных изменений. В этом разделе мы рассмотрим, как автоматизировать извлечение определений объектов из базы данных в набор файлов проекта 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