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


Обзор ссылок на базы данных

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

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

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

Примечание.

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

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

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

Включая конкретную ссылку на базу данных в скриптах SQL, используйте переменные SQLCMD, именованные в файле проекта, чтобы указать имя базы данных. Например, следующий скрипт SQL ссылается на таблицу Warehouse в базе данных:

SELECT ProductId, StorageLocation, BinNumber
FROM [$(Warehouse)].[Production].[ProductInventory]

Ссылка на базу данных, соответствующая $(Warehouse) переменной SQLCMD, включается в файл проекта и содержится <DatabaseSqlCmdVariable>Warehouse</DatabaseSqlCmdVariable>.

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

В этом примере ссылка на проект добавляется в проект AdventureWorksSalesLT.sqlproj SQL, который является частью той же базы данных.

  <ItemGroup>
    <ProjectReference Include="..\AdventureWorks\AdventureWorksSalesLT.sqlproj">
      <Name>AdventureWorksSalesLT</Name>
      <Project>{d703fc7a-bc47-4aef-9dc5-cf01094ddb37}</Project>
      <Private>True</Private>
      <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
    </ProjectReference>
  </ItemGroup>

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

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

Ссылка на пакет для системной master базы данных SQL 2022 показана в следующем примере:

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

Ссылки на артефакты Dacpac

Ссылки на .dacpac файл артефактов напрямую не рекомендуется для разработки новых проектов в стиле SDK. Вместо этого используйте ссылки на пакеты NuGet.

В исходных проектах .dacpac SQL ссылки на файлы указываются в .sqlproj файле с элементом <ArtifactReference> . В следующем примере показана .dacpac ссылка на .dacpac артефакт файла в другом проекте на одном сервере:

  <ItemGroup>
    <ArtifactReference Include="..\AdventureWorks\Warehouse\bin\Release\Warehouse.dacpac">
      <HintPath>..\AdventureWorks\Warehouse\bin\Release\Warehouse.dacpac</HintPath>
      <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
      <DatabaseSqlCmdVariable>Warehouse</DatabaseSqlCmdVariable>
    </ArtifactReference>
  </ItemGroup>

Добавление и использование ссылок на проекты

Добавление ссылки на проект

Чтобы добавить ссылку на проект SQL в Visual Studio, щелкните правой кнопкой мыши узел "Ссылки" в проекте в Обозреватель решений и выберите "Добавить ссылку на базу данных".

Снимок экрана: диалоговое окно Visual Studio для ссылок на базу данных.

В диалоговом окне "Добавление ссылки на базу данных" представлены параметры добавления ссылки в:

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

Диалоговое окно также предоставляет раскрывающийся список для выбора из следующих ссылочных расположений:

  • та же база данных
  • разные базы данных, один и тот же сервер
  • другая база данных, другой сервер

Чтобы добавить ссылку на проект SQL, добавьте <ItemGroup> элемент в .sqlproj файл с соответствующим эталонным элементом для каждой ссылки на базу данных. Например, в проект SQL добавляется следующая ссылка на проект SQL для ссылки на WorldWideImporters проект в другой базе данных на другом сервере:

  <ItemGroup>
    <ProjectReference Include="..\Contoso\WorldWideImporters.sqlproj">
      <Name>WorldWideImporters</Name>
      <Project>{d703fc7a-bc47-4aef-9dc5-cf01094ddb37}</Project>
      <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
      <ServerSqlCmdVariable>WWIServer</ServerSqlCmdVariable>
      <DatabaseSqlCmdVariable>WorldWideImporters</DatabaseSqlCmdVariable>
    </ProjectReference>
  </ItemGroup>

Ссылка на проект используется в примере определения представления в проекте SQL:

CREATE VIEW dbo.WorldWide_Products
AS
SELECT ProductID, ProductName, SupplierID
FROM [$(WWIServer)].[$(WorldWideImporters)].[Purchasing].[Suppliers]

Чтобы добавить ссылку на базу данных в проект SQL в расширении База данных SQL Projects, щелкните правой кнопкой мыши узел "Ссылки на базы данных" в представлении "Проекты базы данных" и выберите "Добавить ссылку на базу данных".

Снимок экрана: диалоговое окно добавления ссылки в Azure Data Studio.

Доступные ссылочные типы:

  • системная база данных
  • Приложение уровня данных (.dacpac)
  • опубликованное приложение уровня данных (.nupkg)
  • проект

Расширение также запрашивает выбор из следующих ссылочных расположений:

  • та же база данных
  • разные базы данных, один и тот же сервер
  • другая база данных, другой сервер

Чтобы добавить ссылку на проект SQL, добавьте <ItemGroup> элемент в .sqlproj файл с соответствующим эталонным элементом для каждой ссылки на базу данных. Например, в проект SQL добавляется следующая ссылка на проект SQL для ссылки на WorldWideImporters проект в другой базе данных на другом сервере:

  <ItemGroup>
    <ProjectReference Include="..\Contoso\WorldWideImporters.sqlproj">
      <Name>WorldWideImporters</Name>
      <Project>{d703fc7a-bc47-4aef-9dc5-cf01094ddb37}</Project>
      <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
      <ServerSqlCmdVariable>WWIServer</ServerSqlCmdVariable>
      <DatabaseSqlCmdVariable>WorldWideImporters</DatabaseSqlCmdVariable>
    </ProjectReference>
  </ItemGroup>

Ссылка на проект используется в примере определения представления в проекте SQL:

CREATE VIEW dbo.WorldWide_Products
AS
SELECT ProductID, ProductName, SupplierID
FROM [$(WWIServer)].[$(WorldWideImporters)].[Purchasing].[Suppliers]

Сборка со ссылками на проекты

Для создания проекта SQL со ссылками на базу данных может потребоваться дополнительная настройка, чтобы гарантировать доступность ссылочных объектов во время процесса сборки. Например, если проект строится в конвейере непрерывной интеграции (CI), среда агента сборки должна быть настроена аналогично локальной среде разработки.

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

Публикация со ссылками на проект

Публикация созданного .dacpac из проекта со ссылками на базу данных не требует дополнительных шагов. Файл .dacpac содержит указанные объекты и переменные SQLCMD, указанные в файле проекта.

Для ссылок на базы данных на объекты в той же базе данных объекты из указанного проекта включаются в .dacpac файл, но по умолчанию не включаются в развертывание. Чтобы включить объекты в развертывание, используйте /p:IncludeCompositeObjects=true параметр в средстве командной строки SqlPackage. Например, следующая команда развертывает AdventureWorks проект с параметром /p:IncludeCompositeObjects=true включения объектов из ссылок на базу данных в AdventureWorks:

sqlpackage /Action:Publish /SourceFile:AdventureWorks.dacpac /TargetConnectionString:{connection_string_here} /p:IncludeCompositeObjects=true

При развертывании .dacpac файла со ссылками на базу данных в разных базах данных (на одном или другом сервере) переменные SQLCMD, указанные в файле проекта, должны иметь правильные значения для целевой среды. Задание значений переменных SQLCMD во время развертывания выполняется с /v параметром в средстве командной строки SqlPackage . Например, следующая команда задает для переменной WorldWideImporters значение и WWIServer переменную WorldWideImporters localhostследующим образом:

sqlpackage /Action:Publish /SourceFile:AdventureWorks.dacpac /TargetConnectionString:{connection_string_here} /v:WorldWideImporters=WorldWideImporters /v:WWIServer=localhost