Что такое проекты базы данных SQL?
Область применения: SQL Server 2022 (16.x)
База данных Azure SQL
Управляемый экземпляр Azure SQL
База данных SQL в Microsoft Fabric
Проект базы данных SQL — это локальное представление объектов SQL, составляющих схему для одной базы данных, например таблиц, хранимых процедур или функций. Цикл разработки проекта базы данных SQL позволяет интегрировать разработку базы данных в рабочие процессы непрерывной интеграции и непрерывного развертывания (CI/CD), признанных в качестве лучших практик разработки.
Обзор
Проекты SQL основаны на декларативных инструкциях T-SQL. В коде проекта базы данных SQL каждый объект создается один раз. Если необходимо изменить что-то в этом объекте, например добавление столбцов или изменение типа данных, измените отдельный файл, объявляющий объект один раз.
При построении проекта базы данных SQL выходной артефакт является файлом .dacpac
. Новые и существующие базы данных можно обновить в соответствии с содержимым .dacpac
, публикуя .dacpac
в целевую базу данных.
Фреймворк проектов базы данных SQL вокруг вашего кода базы данных добавляет две основные функции в этот набор файлов в процессе сборки:
- проверка ссылок между объектами и синтаксисом для конкретной версии SQL
- развертывание артефакта сборки в новых или существующих базах данных
Функциональные возможности проектов базы данных SQL предоставляются библиотекой Microsoft.SqlServer.DacFx .NET и представлены в нескольких средствах разработки SQL. DacFx имеет несколько точек расширяемости, таких как изменение шагов развертывания и возможность создания пользовательских правил для анализа кода. Пакет SDK для проектов SQL Microsoft.Build.Sqlрекомендуется для новых разработки и является форматом, используемым расширением проектов базы данных SQL для Azure Data Studio и VS Code. Поддержка SQL-проектов в формате SDK в Visual Studio пока в предварительном доступе.
Проверка
При построении проекта SQL проверяются связи между объектами. Например, определение представления не может содержать таблицу или столбцы, которые не существуют в проекте SQL.
Кроме того, проект SQL содержит свойство в файле .sqlproj
под названием "целевая платформа". Эти сведения используются во время процесса сборки для проверки того, существуют ли функции и синтаксис T-SQL в этой версии SQL. Например, функции JSON, добавленные в SQL Server 2022, нельзя использовать в проекте SQL, заданном целевой платформой Sql140 (SQL Server 2017).
Чтобы создать проект SQL, мы запускаем dotnet build из командной строки. В графических инструментах, поддерживающих проекты SQL (Azure Data Studio, VS Code и Visual Studio), есть пункт меню для создания проекта SQL.
Выходные данные консоли процесса сборки могут содержать ошибки (сбой сборки) или предупреждения. Предупреждения сборки могут включать несогласованное использование заглавных букв в именах объектов и другие настраиваемые рекомендации, но не приводят к ее отмене.
Результатом процесса сборки является файл .dacpac
, который можно найти по умолчанию в папке bin/Debug
.
Развертывание
Файл .dacpac
является мощным, повторно используемым и декларативным артефактом. С помощью этого файла можно использовать SqlPackage или другие средства для применения кода базы данных к базе данных. Команда SqlPackage для развертывания .dacpac
это команда publish.
Например, sqlpackage /Action:Publish /SourceFile:yourfile.dacpac /TargetConnectionString:{yourconnectionstring}
.
Новые базы данных
SqlPackage управляет связями объектов для создания каждого объекта в правильном порядке при публикации dacpac в новую базу данных. Например, SqlPackage создает Table_A перед Table_B, если Table_B имеет внешний ключ для Table_A.
Вы не хотите выполнять всю папку скриптов SQL, особенно если вы можете использовать проекты SQL, которые автоматически выполняют каждый раздел T-SQL в правильном порядке на основе связей объектов.
Существующие базы данных
Помимо навигации по иерархии объектов при публикации в новых базах данных, .dacpac
процесс публикации также вычисляет разницу между источником .dacpac
и целевой базой данных перед определением действий, которые необходимо предпринять для обновления этой базы данных. Например, если в базе данных отсутствуют два столбца из Table_C, которые имеются в проекте SQL, и StoredProcedure_A была изменена, SqlPackage создаёт оператор ALTER TABLE
и оператор ALTER PROCEDURE
вместо того, чтобы вслепую пытаться создать множество объектов.
Гибкость, предоставляемая командой публикации для существующих баз данных, не ограничивается одной базой данных. Его .dacpac
можно развернуть несколько раз, например, при обновлении парка из ста баз данных.
Когда использовать
Проекты базы данных SQL отлично подходят для команд, которые хотят интегрировать разработку баз данных в рабочий процесс CI/CD. Декларативный характер проектов SQL позволяет использовать один источник истины для схемы базы данных, а процесс сборки и публикации обеспечивает повторяющийся и надежный способ развертывания изменений в базах данных.
Проекты базы данных SQL используются для отслеживания источника истины для состояния базы данных, включая разработку с помощью реляционного средства сопоставления объектов (ORM), например EF Core. Графическое средство или командная строка можно использовать для извлечения схемы базы данных в проект SQL независимо от ORM, используемого для создания базы данных.
Проекты баз данных SQL поддерживают семейство баз данных SQL Server и Azure SQL, включая Azure SQL Database и Azure Synapse Analytics. Независимо от того, разрабатываете ли вы приложение или хранилище данных, проекты базы данных SQL можно использовать для управления схемой базы данных. Проекты SQL можно разрабатывать из средств в Visual Studio, VS Code и Azure Data Studio.
Исходные проекты и проекты в стиле SDK
Формат проекта в стиле SDK для Microsoft.Build.Sql основан на новых проектах SDK-стиля, представленных в .NET Core, и является форматом, используемым расширением SQL Database Projects для Azure Data Studio и VS Code. Проекты Microsoft.Build.Sql заменяют исходный формат проекта SQL на основе MSBuild (.NET Framework). Поддержка проектов SQL в стиле SDK в Visual Studio в настоящее время находится в предварительной версии и активно разрабатывается, при этом в Visual Studio доступны как оригинальный, так и формат проекта в стиле SDK.
Новая работа по разработке должна рассмотреть возможность использования проектов Microsoft.Build.Sql, так как проекты в стиле SDK — это формат, который будет поддерживаться в будущем. Формат проекта в стиле ПАКЕТА SDK является более гибким и содержит новые функции, недоступные в исходных проектах SQL:
- Поддержка .NET 8 (кроссплатформенная)
- Ссылки на пакеты NuGet для ссылок на базы данных
- Шаблон globbing по умолчанию для .sql файлов в проекте
Проекты в стиле SDK имеют супермножество функций из исходных проектов SQL, а существующие проекты SQL можно преобразовать в проекты в стиле SDK путем изменения файла проекта.
Исключением из охвата функциональных возможностей является поддержка объектов SQLCLR, для которых требуется .NET Framework. Проект, содержащий объекты SQLCLR, можно преобразовать в проект в стиле ПАКЕТА SDK, но для проекта требуется .NET Framework и должен быть построен в Visual Studio в Windows. После завершения сборки проекта с объектом SQLCLR, .dacpac
можно развернуть с помощью SqlPackage в .NET и .NET Framework и использовать в качестве ссылки .dacpac
в проекте (в той же базе данных или в другой базе данных на том же сервере).
Связанный контент
- Разработка базы данных вне сети с учетом проекта
- Расширение проектов Баз данных SQL
- SqlPackage
- Примеры конвейеров CI/CD для проектов SQL
- GitHub sql-action
- SQL-развертывания Azure DevOps
- Обзор приложений уровня доступа к данным (DAC)
- Репозиторий отзывов DacFx
- Начало работы с проектами базы данных SQL
- Руководство по созданию и развертыванию проекта SQL