SQL projects package references overview
Applies to: SQL Server Azure SQL Database Azure SQL Managed Instance
Package references in SQL projects allow you to reference database objects from other projects or NuGet packages. The database objects added to a project through package references can be part of the same database, a different database on the same server, or a different database on a different server.
Note
Package references are the recommended method for referencing database objects in new development. Referencing NuGet packages is only supported in SDK-style SQL projects (preview).
Database object package references
Package references are one of several methods for adding database objects to a SQL project as a database reference. Package references can contain objects for the same database, a different database on the same server, or a different database on a different server. Package references can be used to break up a database into smaller, more manageable projects, which can help to reduce the time required to build a project during iterative local development.
SQL project file sample and syntax
Package references are added to a SQL project through entries in the .sqlproj
file, similar to C# projects. When a package reference is to a different database on the same server, a <DatabaseSqlCmdVariable>
element is included in the package reference. When a package reference is to a different database on a different server, a <ServerSqlCmdVariable>
element is also included in the package reference. Package references to the same database don't include <ServerSqlCmdVariable>
or <DatabaseSqlCmdVariable>
elements.
The following example includes a package reference to the Contoso.AdventureWorks.SalesLT
package as a database reference for the same database where the objects in the package become part of the database model in the SQL project:
...
<ItemGroup>
<PackageReference Include="Contoso.AdventureWorks.SalesLT" Version="1.1.0" />
</ItemGroup>
</Project>
System databases
The SQL system databases (master
, msdb
) are published on NuGet.org as database reference packages. These packages contain the schema for the system databases and can be used as package references in SQL projects. The system database packages are versioned to align with the version of SQL Server they're associated with. For example, the master
system database package for SQL Server 2022 is Microsoft.SqlServer.Dacpacs.Master
version 160.2.1
and can be added to a SQL project as a package reference:
...
<ItemGroup>
<PackageReference Include="Microsoft.SqlServer.Dacpacs.Master" Version="160.2.1" />
</ItemGroup>
</Project>
Minor version changes reflect bug fixes and minor changes to the schema within a SQL Server version.
The available system database packages are:
- SQL Server
master
system database - SQL Server
msdb
system database - Azure SQL Database
master
system database - Azure Synapse Analytics
master
system database - Azure Synapse Analytics serverless pools
master
system database
Package dacpac NuGet packages
A database reference package is a NuGet package that contains a .dacpac
file. The NuGet package can be published to a NuGet feed, such as Azure Artifacts, for use in SQL projects. Creating this package follows the same process as creating a NuGet package for other types of projects. For more information, see Creating a package with the dotnet CLI.
To package a .sqlproj
file as a NuGet package, use the dotnet pack
command from the command line. By default, the dotnet pack
command creates a NuGet package from the .sqlproj
file in the bin/Debug
folder.
Package metadata can be specified by properties inside the <PropertyGroup>
element in the .sqlproj
file. For example, the following properties specify the package ID, version, description, authors, and company:
<PackageId>Contoso.AdventureWorks.SalesLT</PackageId>
<Version>1.0.0</Version>
<Description>AdventureWorks database SalesLT objects</Description>
<Authors>DevTeam</Authors>
<Company>Contoso Outdoors</Company>
The .nupkg
file created by the dotnet pack
command can be published to a NuGet feed for use in SQL projects. This database objects can be viewed by anyone with access to the package, so consideration should be made for selecting a public or private feed location. For more information, see Hosting with private package feeds.