Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:SQL Server
Azure SQL База данных
Azure SQL Управляемый экземпляр
SQL База данных в Microsoft Fabric
Ссылки на базы данных в проектах SQL позволяют включать объекты, которые не включены в проект, связываясь с другим проектом, .dacpac файлом или опубликованным пакетом NuGet. Объекты базы данных, добавленные в проект, могут быть частью одной базы данных, другой базы данных на одном сервере или другой базой данных на другом сервере. При разработке для SQL Server используйте ссылки на базы данных, чтобы связывать с другой базой данных на том же сервере с использованием трёхчастных имён или с другой базой данных на другом сервере для межбазовых запросов. Для баз данных с большим количеством объектов в разных группах используйте ссылки на базы данных для разбиения базы данных в небольшие управляемые проекты. Меньший размер проекта может помочь повысить производительность и сократить время, необходимое для создания проекта во время итеративной локальной разработки.
Note
Используйте ссылки на проекты и ссылки на пакеты NuGet для ссылок на базы данных в новой разработке. Исходные проекты SQL не поддерживают ссылки на пакеты NuGet.
Пример и синтаксис файла проекта SQL
Включите ссылки на базу данных в проект с помощью записей в .sqlproj файле, как и проекты C#. Используйте синтаксис SQLCMD для ссылки на имя базы данных в объектах проекта SQL. Если ссылка на базу данных указывает на другую базу данных на том же сервере, включите элемент <DatabaseSqlCmdVariable> в ссылку на проект. Если ссылка на базу данных указывает на другую базу данных на другом сервере, также включите <ServerSqlCmdVariable> элемент в ссылку на проект. Ссылки на базу данных в одну и ту же базу данных не включают <ServerSqlCmdVariable> или <DatabaseSqlCmdVariable> элементы.
Чтобы включить конкретную ссылку на базу данных в скрипты SQL, используйте переменные SQLCMD, именованные в файле проекта, чтобы указать имя базы данных. Например, следующий скрипт SQL ссылается на таблицу Warehouse в базе данных:
SELECT ProductId,
StorageLocation,
BinNumber
FROM [$(Warehouse)].[Production].[ProductInventory];
Файл проекта содержит ссылку на базу данных, соответствующую $(Warehouse) переменной SQLCMD, и содержит <DatabaseSqlCmdVariable>Warehouse</DatabaseSqlCmdVariable>.
Трёхчастные имена в пределах одной базы данных
Если объект в проекте SQL ссылается на другой объект в той же базе данных, трехкомпонентное именование не требуется, даже если объекты включены через ссылку на базу данных. Однако проекты SQL включают автоматическую переменную SQLCMD для имени базы данных, которую можно использовать в скриптах SQL для ссылки на базу данных проекта без жесткого кода имени. Если требуется трехкомпонентное именование, используйте $(DatabaseName) в скриптах SQL для ссылки на базу данных. Например, следующий скрипт SQL ссылается на таблицу в базе данных проекта:
UPDATE [$(DatabaseName)].[SalesLT].[Customer]
SET [SalesPerson] = 'John Doe',
[ModifiedDate] = GETDATE()
WHERE [CustomerId] = @CustomerId;
Литеральные значения базы данных
В некоторых случаях может потребоваться использовать литеральное (не переменное) значение для имени базы данных из ссылки на базу данных в объектах SQL. Файл можно настроить .sqlproj для указания литерального значения имени базы данных вместо использования переменной SQLCMD. Элемент, используемый для указания литерального значения <DatabaseLiteralValue>. Если вы используете этот элемент, не используйте элемент <DatabaseSqlCmdVariable>. В элементе <DatabaseLiteralValue> укажите литеральное значение для имени базы данных. Например, ссылка на базу данных с <DatabaseVariableLiteralValue>WarehouseDB</DatabaseVariableLiteralValue> используется в SQL-скрипте следующим образом:
SELECT ProductId,
StorageLocation,
BinNumber
FROM [WarehouseDB].[Production].[ProductInventory];
Ссылки на проекты
В этом примере вы добавите ссылку на проект SQL с именем AdventureWorksSalesLT.sqlproj , который является частью той же базы данных.
<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 Server 2022:
<ItemGroup>
<PackageReference Include="Microsoft.SqlServer.Dacpacs.Master" Version="160.2.1" />
</ItemGroup>
Ссылки на артефакты Dacpac
Не используйте прямые ссылки на файл артефакта .dacpac в новых проектах в стиле SDK. Вместо этого используйте ссылки на пакеты NuGet.
В исходных проектах SQL вы указываете ссылки на файлы .dacpac в файле .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", щелкните правой кнопкой мыши узел "Ссылки на базы данных" в представлении "Проекты баз данных" и выберите "Добавить ссылку на базу данных".
Доступные ссылочные типы:
- системная база данных
- Приложение уровня данных (
.dacpac) - опубликованное приложение уровня слоя данных (
.nupkg) - project
Расширение также предлагает выбрать из следующих справочных местоположений.
- та же база данных
- разные базы данных, один и тот же сервер
- другая база данных, другой сервер
Чтобы добавить ссылку на проект 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, добавьте <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 значение WorldWideImporters, а переменной WWIServer значение localhost.
sqlpackage /Action:Publish /SourceFile:AdventureWorks.dacpac /TargetConnectionString:{connection_string_here} /v:WorldWideImporters=WorldWideImporters /v:WWIServer=localhost