Обзор ссылок на базы данных
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Ссылки на базы данных в проектах SQL позволяют включать объекты, которые не включены в проект, связываясь с другим проектом, .dacpac
файлом или опубликованным пакетом NuGet. Объекты базы данных, добавленные в проект, могут быть частью одной базы данных, другой базы данных на одном сервере или другой базой данных на другом сервере. Для разработки SQL Server ссылки на базы данных можно использовать для связывания с другой базой данных на одном сервере для именования трех частей или ссылки на другую базу данных на другом сервере для запросов между базами данных. Для баз данных с большим количеством объектов в разных группах ссылки на базы данных можно использовать для разбиения базы данных в небольшие управляемые проекты. Меньший размер проекта может помочь повысить производительность и сократить время, необходимое для создания проекта во время итеративной локальной разработки.
Примечание.
Ссылки на проекты и ссылки на пакеты 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, щелкните правой кнопкой мыши узел "Ссылки" в проекте в Обозреватель решений и выберите "Добавить ссылку на базу данных".
В диалоговом окне "Добавление ссылки на базу данных" представлены параметры добавления ссылки в:
- Проект 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, щелкните правой кнопкой мыши узел "Ссылки на базы данных" в представлении "Проекты базы данных" и выберите "Добавить ссылку на базу данных".
Доступные ссылочные типы:
- системная база данных
- Приложение уровня данных (
.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