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


Ссылки на пакеты проектов SQL

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

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

Примечание.

Ссылки на пакеты — это рекомендуемый метод для ссылки на объекты базы данных в новой разработке. Ссылка на пакеты NuGet поддерживается только в проектах SQL в стиле SDK.

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

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

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

Пример и синтаксис файла проекта SQL

Ссылки на пакеты добавляются в проект SQL с помощью записей в .sqlproj файле, аналогичных проектам C#. Если ссылка на пакет находится в другой базе данных на одном сервере, <DatabaseSqlCmdVariable> элемент включается в ссылку на пакет. Если ссылка на пакет находится в другой базе данных на другом сервере, <ServerSqlCmdVariable> элемент также включается в ссылку на пакет. Ссылки на пакеты в ту же базу данных не включают <ServerSqlCmdVariable> или <DatabaseSqlCmdVariable> элементы.

В следующем примере содержится ссылка на пакет Contoso.AdventureWorks.SalesLT в качестве ссылки на базу данных для той же базы данных, где объекты из пакета становятся частью модели базы данных в проекте SQL:

...
  <ItemGroup>
    <PackageReference Include="Contoso.AdventureWorks.SalesLT" Version="1.1.0" />
  </ItemGroup>
</Project>

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

...
  <ItemGroup>
    <PackageReference Include="Contoso.AdventureWorks" Version="1.1.0">
      <DatabaseSqlCmdVariable>AdventureDB</DatabaseSqlCmdVariable>
      <DacpacName>AdventureWorks</DacpacName>
    </PackageReference>
  </ItemGroup>
  <ItemGroup>
    <SqlCmdVariable Include="AdventureDB">
      <DefaultValue>AdventureWorks</DefaultValue>
      <Value>$(SqlCmdVar__1)</Value>
    </SqlCmdVariable>
  </ItemGroup>
</Project>

В этом примере файл AdventureWorks .dacpac публикуется в качестве пакета Contoso.AdventureWorks версии 1.1.0 в канал NuGet. Элемент <DatabaseSqlCmdVariable> указывает имя базы данных на том же сервере, где находятся объекты в пакете, и будет использоваться для указания этой ссылки в трех частях именования. Переменная SQLCMD AdventureDBиспользуется для задания имени базы данных во время развертывания и используется в проекте аналогично этому примеру запроса:

SELECT * FROM [$(AdventureDB)].dbo.Customers;

Элемент <DacpacName> указывает имя файла .dacpac для ссылки на пакет без расширения файла или пути. Элемент <DacpacName> является необязательным и требуется только в том случае, если имя файла .dacpac отличается от имени пакета.

Системные базы данных

Системные базы данных SQL (master, msdb) публикуются в NuGet.org в качестве ссылочных пакетов баз данных. Эти пакеты содержат схему системных баз данных и могут использоваться в качестве ссылок на пакеты в проектах SQL. Пакеты системной базы данных версионируются, чтобы соответствовать версии SQL Server, с которой они связаны. Например, master пакет системной базы данных для SQL Server 2022 является Microsoft.SqlServer.Dacpacs.Master версией 160.2.1 и может быть добавлен в проект SQL в качестве ссылки на пакет:

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

Незначительные изменения версий отражают исправления ошибок и незначительные изменения схемы в версии SQL Server.

Доступные пакеты системной базы данных:

Пакеты dacpac NuGet

Пакет ссылки на базу данных — это пакет NuGet, содержащий .dacpac файл. Пакет NuGet можно опубликовать в репозитарий NuGet, такой как Azure Artifacts, для использования в проектах SQL. Создание этого пакета следует тому же процессу, что и создание пакета NuGet для других типов проектов. Дополнительные сведения см. в статье "Создание пакета с помощью dotnet CLI".

Снимок экрана: сводка ссылки на пакет для проектов SQL.

Чтобы упаковать .sqlproj файл в виде пакета NuGet, используйте dotnet pack команду из командной строки. По умолчанию dotnet pack команда создает пакет NuGet из .sqlproj файла в папке bin/Debug .

Метаданные пакета можно указать свойствами внутри <PropertyGroup> элемента в .sqlproj файле. Например, следующие свойства указывают идентификатор пакета, версию, описание, авторов и компанию:

<PackageId>Contoso.AdventureWorks.SalesLT</PackageId>
<Version>1.0.0</Version>
<Description>AdventureWorks database SalesLT objects</Description>
<Authors>DevTeam</Authors>
<Company>Contoso Outdoors</Company>

Файл .nupkg, созданный командой dotnet pack, можно опубликовать в репозиторий NuGet для использования в проектах SQL. Эти объекты базы данных могут просматриваться всеми пользователями с доступом к пакету, поэтому следует рассмотреть вопрос о выборе общедоступного или частного веб-канала. Для получения дополнительной информации см. раздел "Размещение с частными источниками пакетов".

При ссылке на пакет, в котором PackageId отличается от имени файла .dacpac, элемент <DacpacName> требуется в ссылке на пакет при использовании пакета.

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

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

<ItemGroup>
  <PackageReference Include="Your.CustomCode.AnalysisRules" Version="1.2.3" />
</ItemGroup>

На который ссылается пакет, должен быть доступен на веб-канале NuGet, например NuGet.org, артефактах Azure или локальном источнике. При ссылке на пакет, содержащий правила анализа кода, правила автоматически включаются в проект SQL и оцениваются, когда свойство проекта RunSqlCodeAnalysis имеет значение true. Правила можно отключить или настроить в свойствах проекта, чтобы каждое правило возвращало ошибку по отдельности.