Использование проектов SQL в стиле пакета SDK с расширением "Проекты Баз данных SQL" (предварительная версия)

В этой статье приведены проекты SQL в стиле ПАКЕТА SDK microsoft.Build.Sql в расширении проектов База данных SQL в Azure Data Studio или Visual Studio Code. Проекты SQL в стиле пакета SDK особенно подходят для приложений, поставляемых через конвейеры или встроенные в кроссплатформенные среды. Первоначальное объявление доступно в TechCommunity.

Примечание.

Microsoft.Build.Sql в настоящее время находится в предварительной версии.

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

Проект базы данных в стиле пакета SDK можно создать из пустого проекта или из существующей базы данных.

Пустой проект

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

По умолчанию флажок Проект в стиле пакета SDK (предварительная версия) установлен. После завершения диалогового окна пустой проект открывается и отображается в представлении проектов баз данных для редактирования.

из существующей базы данных;

В представлении проекта нажмите кнопку "Создать проект из базы данных " и подключитесь к SQL Server. После установки соединения выберите базу данных из списка доступных баз данных и задайте имя проекта. Выберите целевую структуру извлечения.

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

Сборка и публикация

Из интерфейсов Azure Data Studio и Visual Studio Code создание и публикация проекта SQL в стиле ПАКЕТА SDK выполняется так же, как и предыдущий формат проекта SQL. Дополнительные сведения об этом процессе см. в разделе Сборка и публикация проекта.

Чтобы создать проект SQL в стиле пакета SDK из командной строки в Windows, macOS или Linux, используйте следующую команду:

dotnet build

Файл.dacpac, полученный в результате создания проекта SQL в стиле ПАКЕТА SDK, совместим с инструментами, связанными с платформой приложений уровня данных (.dacpac, включая .bacpacSqlPackage и GitHub sql-action).

Возможности проекта

В проектах SQL существует несколько возможностей, которые можно указать в .sqlproj файле, который влияет на модель базы данных в сборке или развертывании проекта. В следующих разделах описаны некоторые из этих возможностей, доступных для проектов Microsoft.Build.Sql.

Целевая платформа

Свойство целевой платформы содержится в DSP теге .sqlproj в файле под элементом <PropertyGroup> . Целевая платформа используется во время сборки проекта для проверки поддержки функций, включенных в проект, и добавляется в .dacpac файл в качестве свойства. По умолчанию во время развертывания целевая платформа проверка для целевой базы данных, чтобы обеспечить совместимость. Если целевая платформа не поддерживается целевой базой данных, развертывание завершается ошибкой, если не указан параметр переопределения публикации.

<Project DefaultTargets="Build">
  <Sdk Name="Microsoft.Build.Sql" Version="0.1.12-preview" />
  <PropertyGroup>
    <Name>AdventureWorks</Name>
    <DSP>Microsoft.Data.Tools.Schema.Sql.SqlAzureV12DatabaseSchemaProvider</DSP>
  </PropertyGroup>

Допустимые параметры целевой платформы:

  • Microsoft.Data.Tools.Schema.Sql.Sql120DatabaseSchemaProvider
  • Microsoft.Data.Tools.Schema.Sql.Sql130DatabaseSchemaProvider
  • Microsoft.Data.Tools.Schema.Sql.Sql140DatabaseSchemaProvider
  • Microsoft.Data.Tools.Schema.Sql.Sql150DatabaseSchemaProvider
  • Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider
  • Microsoft.Data.Tools.Schema.Sql.SqlAzureV12DatabaseSchemaProvider
  • Microsoft.Data.Tools.Schema.Sql.SqlDwDatabaseSchemaProvider
  • Microsoft.Data.Tools.Schema.Sql.SqlServerlessDatabaseSchemaProvider
  • Microsoft.Data.Tools.Schema.Sql.SqlDwUnifiedDatabaseSchemaProvider

Ссылки на базу данных

Проверка модели базы данных во время сборки может быть расширена после содержимого проекта SQL с помощью ссылок на базы данных. Ссылки на базы данных, указанные в .sqlproj файле, могут ссылаться на другой проект SQL или .dacpac файл, представляющий другую базу данных или несколько компонентов той же базы данных.

Следующие атрибуты доступны для ссылок на базы данных, представляющих другую базу данных:

  • DatabaseSqlCmdVariable: значение — это имя переменной, используемой для ссылки на базу данных.
    • Эталонный параметр: <DatabaseSqlCmdVariable>SomeOtherDatabase</DatabaseSqlCmdVariable>
    • Пример использования: SELECT * FROM [$(SomeOtherDatabase)].dbo.Table1
  • ServerSqlCmdVariable: значение — это имя переменной, которая используется для ссылки на сервер, на который находится база данных. используется с DatabaseSqlCmdVariable, если база данных находится на другом сервере.
    • Эталонный параметр: <ServerSqlCmdVariable>SomeOtherServer</ServerSqlCmdVariable>
    • Пример использования: SELECT * FROM [$(SomeOtherServer)].[$(SomeOtherDatabase)].dbo.Table1
  • DatabaseVariableLiteralValue: значение является литеральным именем базы данных, используемой в проекте SQL, аналогично DatabaseSqlCmdVariable тому, что ссылка на другую базу данных является литеральным значением.
    • Эталонный параметр: <DatabaseVariableLiteralValue>SomeOtherDatabase</DatabaseVariableLiteralValue>
    • Пример использования: SELECT * FROM [SomeOtherDatabase].dbo.Table1

В файле проекта SQL ссылка на базу данных указывается как ArtifactReference элемент с атрибутом, Include заданным для пути к файлу .dacpac .

  <ItemGroup>
    <ArtifactReference Include="SampleA.dacpac">
      <DatabaseSqlCmdVariable>DatabaseA</DatabaseSqlCmdVariable>
    </ArtifactReference>
  </ItemGroup>
</Project>

Ссылки на пакеты

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

В следующем примере из файла проекта SQL ссылается Microsoft.SqlServer.Dacpacsна пакет для master базы данных.

  <ItemGroup>
    <PackageReference Include="Microsoft.SqlServer.Dacpacs" Version="160.0.0" />
  </ItemGroup>
</Project>

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

  <ItemGroup>
    <PackageReference Include="Microsoft.SqlServer.Dacpacs" Version="160.0.0">
      <DacpacName>msdb</DacpacName>
    </PackageReference>
  </ItemGroup>
</Project>

Переменные SqlCmd

Переменные SqlCmd можно определить в .sqlproj файле и использовать для замены маркеров в объектах и скриптах SQL во время .dacpacразвертывания. В следующем примере из файла проекта SQL определяется переменная с именем EnvironmentName , доступная для использования в объектах и скриптах проекта.

  <ItemGroup>
    <SqlCmdVariable Include="EnvironmentName">
      <DefaultValue>testing</DefaultValue>
      <Value>$(SqlCmdVar__1)</Value>
    </SqlCmdVariable>
  </ItemGroup>
</Project>
IF '$(EnvironmentName)' = 'testing'
BEGIN
    -- do something
END

При развертывании скомпилированного проекта SQL (.dacpac) значение переменной заменяется значением, указанным в команде развертывания. Например, следующая команда развертывает AdventureWorks.dacpac и задает значение переменной EnvironmentNameproduction.

SqlPackage /Action:Publish /SourceFile:AdventureWorks.dacpac /TargetConnectionString:{connection_string_here} /v:EnvironmentName=production

Скрипты предварительного и после развертывания

Скрипты перед развертыванием и после развертывания — это скрипты SQL, включенные в проект, которые будут выполняться во время развертывания. Скрипты предварительного и после развертывания включаются в .dacpac состав, но они не компилируются в объектную модель базы данных или не проверяются. Скрипт предварительного развертывания выполняется перед применением модели базы данных и скрипт после применения модели базы данных выполняется после применения модели базы данных. В следующем примере из файла проекта SQL файл добавляется populate-app-settings.sql в качестве скрипта после развертывания.

  <ItemGroup>
    <PostDeploy Include="populate-app-settings.sql" />
  </ItemGroup>
</Project>

Следующие шаги