Ссылки на пакеты проектов SQL
Область применения:SQL Server
База данных SQL Azure
Управляемый экземпляр SQL Azure
SQL база данных в Microsoft Fabric
Ссылки на пакеты в проектах SQL позволяют ссылаться на объекты базы данных из других проектов или пакетов NuGet. Объекты базы данных, добавленные в проект с помощью ссылок на пакеты, могут быть частью одной базы данных, другой базы данных на одном сервере или другой базой данных на другом сервере.
Примечание.
Ссылки на пакеты — это рекомендуемый метод для ссылки на объекты базы данных в новой разработке. Ссылка на пакеты NuGet поддерживается только в проектах SQL в стиле SDK.
Ссылки на пакеты объектов базы данных
Ссылки на пакеты — это один из нескольких методов добавления объектов базы данных в проект 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.
Доступные пакеты системной базы данных:
-
Системная база данных SQL Server
master
-
Системная база данных SQL Server
msdb
-
master
системная база данных База данных SQL Azure -
Системная база данных Azure Synapse Analytics
master
-
Системная база данных бессерверных пулов
master
Azure Synapse Analytics
Пакеты dacpac NuGet
Пакет ссылки на базу данных — это пакет NuGet, содержащий .dacpac
файл. Пакет NuGet можно опубликовать в репозитарий NuGet, такой как Azure Artifacts, для использования в проектах SQL. Создание этого пакета следует тому же процессу, что и создание пакета NuGet для других типов проектов. Дополнительные сведения см. в статье "Создание пакета с помощью dotnet CLI".
Чтобы упаковать .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. Правила можно отключить или настроить в свойствах проекта, чтобы каждое правило возвращало ошибку по отдельности.