Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Verwaltete Azure SQL-Instanz
SQL-Datenbank in Microsoft Fabric
Paketverweise in SQL-Projekten ermöglichen Ihnen das Verweisen auf Datenbankobjekte aus anderen Projekten oder NuGet-Paketen. Die Datenbankobjekte, die einem Projekt über Paketverweise hinzugefügt werden, können Teil derselben Datenbank, einer anderen Datenbank auf demselben Server oder einer anderen Datenbank auf einem anderen Server sein.
Note
Paketverweise sind die empfohlene Methode zum Verweisen auf Datenbankobjekte in der neuen Entwicklung. Das Verweisen auf NuGet-Pakete wird nur in SQL-Projekten im SDK-Stil unterstützt.
Verweise auf Datenbankobjektpakete
Paketverweise sind eine von mehreren Methoden zum Hinzufügen von Datenbankobjekten zu einem SQL-Projekt als Datenbankverweis. Paketverweise können Objekte für dieselbe Datenbank, eine andere Datenbank auf demselben Server oder eine andere Datenbank auf einem anderen Server enthalten. Paketverweise können verwendet werden, um eine Datenbank in kleinere, besser verwaltbare Projekte aufzuteilen, was dazu beitragen kann, die zeitaufwendige Erstellung eines Projekts während der iterativen lokalen Entwicklung zu reduzieren.
SQL-Projektdateibeispiel und Syntax
Paketverweise werden einem SQL-Projekt über Einträge in der .sqlproj-Datei hinzugefügt, ähnlich wie C#-Projekte. Wenn sich ein Paketverweis auf einer anderen Datenbank auf demselben Server bezieht, wird ein <DatabaseSqlCmdVariable>-Element in der Paketreferenz eingeschlossen. Wenn sich ein Paketverweis auf einer anderen Datenbank auf einen anderen Server bezieht, wird ein <ServerSqlCmdVariable>-Element auch in der Paketreferenz eingeschlossen. Paketverweise auf dieselbe Datenbank enthalten keine <ServerSqlCmdVariable>- oder <DatabaseSqlCmdVariable>-Elemente.
Das folgende Beispiel enthält einen Paketverweis auf das Contoso.AdventureWorks.SalesLT-Paket als Datenbankverweis für dieselbe Datenbank, in der die Objekte im Paket Teil des Datenbankmodells im SQL-Projekt werden:
...
<ItemGroup>
<PackageReference Include="Contoso.AdventureWorks.SalesLT" Version="1.1.0" />
</ItemGroup>
</Project>
Das folgende Beispiel enthält einen Paketverweis auf das Contoso.AdventureWorks Paket als Datenbankverweis für eine andere Datenbank (AdventureWorks) auf demselben Server, auf dem die Objekte im Paket Teil des Datenbankmodells im SQL-Projekt werden:
...
<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>
In diesem Beispiel wird die AdventureWorks-Datei .dacpac als Paketversion Contoso.AdventureWorks1.1.0 in einem NuGet-Feed veröffentlicht. Das <DatabaseSqlCmdVariable> Element gibt den Namen der Datenbank auf demselben Server an, auf dem sich die Objekte im Paket befinden, und wird verwendet, um diesen Verweis in dreiteiliger Benennung anzugeben. Die SQLCMD-VariableAdventureDB wird verwendet, um den Datenbanknamen zur Bereitstellungszeit festzulegen und wird in dem Projekt ähnlich wie in dieser Beispielabfrage verwendet:
SELECT * FROM [$(AdventureDB)].dbo.Customers;
Das <DacpacName> Element gibt den Namen der .dacpac Datei für den Paketverweis ohne die Dateierweiterung oder den Pfad an. Das <DacpacName> Element ist optional und nur erforderlich, wenn sich der Name der .dacpac Datei vom Namen des Pakets unterscheidet.
Systemdatenbanken
Die SQL-Systemdatenbanken (master, msdb) werden auf NuGet.org als Datenbankreferenzpakete veröffentlicht. Diese Pakete enthalten das Schema für die Systemdatenbanken und können als Paketverweise in SQL-Projekten verwendet werden. Die Systemdatenbankpakete werden entsprechend der Version von SQL Server versioniert, der sie zugeordnet sind. Beispielsweise ist das Systemdatenbankpaket master für SQL Server 2022 Microsoft.SqlServer.Dacpacs.Master-Version 160.2.1 und kann einem SQL-Projekt als Paketverweis hinzugefügt werden:
...
<ItemGroup>
<PackageReference Include="Microsoft.SqlServer.Dacpacs.Master" Version="160.2.1" />
</ItemGroup>
</Project>
Nebenversionsänderungen spiegeln Fehlerkorrekturen und kleinere Änderungen am Schema in einer SQL Server-Version wider.
Die verfügbaren Systemdatenbankpakete sind:
-
SQL Server–
masterSystemdatenbanken -
SQL Server–
msdbSystemdatenbanken -
master-Systemdatenbank von Azure SQL-Datenbank - SQL-Datenbank in Fabric-Systemobjekten
-
master-Datenbank von Azure Synapse Analytics -
master-Systemdatenbank von serverlosen Azure Synapse Analytics-Pools
Paket dacpac NuGet-Pakete
Ein Datenbankreferenzpaket ist ein NuGet-Paket, das eine .dacpac-Datei enthält. Das NuGet-Paket kann für die Verwendung in SQL-Projekten in einem NuGet-Feed veröffentlicht werden, z. B. Azure Artifacts. Das Erstellen dieses Pakets folgt demselben Prozess wie das Erstellen eines NuGet-Pakets für andere Projekttypen. Weitere Informationen finden Sie unter Erstellen eines Pakets mit der dotnet-CLI.
Verwenden Sie den .sqlproj-Befehl aus der Befehlszeile, um eine dotnet pack-Datei als NuGet-Paket zu verpacken. Standardmäßig erstellt der dotnet pack-Befehl ein NuGet-Paket aus der .sqlproj-Datei im bin/Debug-Ordner.
Paket-Metadaten können durch Eigenschaften innerhalb des Elements <PropertyGroup> in der .sqlproj-Datei angegeben werden. Die folgenden Eigenschaften geben beispielsweise die Paket-ID, Version, Beschreibung, Autoren und Unternehmen an:
<PackageId>Contoso.AdventureWorks.SalesLT</PackageId>
<Version>1.0.0</Version>
<Description>AdventureWorks database SalesLT objects</Description>
<Authors>DevTeam</Authors>
<Company>Contoso Outdoors</Company>
Die vom .nupkg-Befehl erstellte dotnet pack-Datei kann für die Verwendung in SQL-Projekten in einem NuGet-Feed veröffentlicht werden. Diese Datenbankobjekte können von jedem mit Zugriff auf das Paket angezeigt werden, daher sollte die Auswahl eines öffentlichen oder privaten Feedspeicherorts berücksichtigt werden. Weitere Informationen finden Sie unter Hosting mit privaten Paket-Feeds.
Beim Verweisen auf ein Paket, bei dem sich der PackageId Name der .dacpac Datei unterscheidet, ist das <DacpacName> Element im Paketverweis erforderlich, wenn das Paket verwendet wird.
Erweiterte Paketverweise für Codeanalyse-Regeln
Paketverweise können auch verwendet werden, um auf weitere Codeanalyseregeln zu verweisen, die als Teil der Codeanalyseerweiterung entwickelt wurden. Der Paketverweis für ein Codeanalyseregelpaket ähnelt dem Paketverweis für ein Datenbankobjektpaket. Das folgende Beispiel zeigt einen Paketverweis auf ein benutzerdefiniertes Codeanalyseregelpaket:
<ItemGroup>
<PackageReference Include="Your.CustomCode.AnalysisRules" Version="1.2.3" />
</ItemGroup>
Das paket, auf das verwiesen wird, sollte in einem NuGet-Feed verfügbar sein, z. B. NuGet.org, Azure Artifacts oder eine lokale Quelle. Wenn auf ein Paket mit Codeanalyseregeln verwiesen wird, werden die Regeln automatisch im SQL-Projekt enthalten und ausgewertet, wenn die Projekteigenschaft RunSqlCodeAnalysis auf "true" festgelegt ist. Die Regeln können in den Projekteigenschaften individuell deaktiviert oder so eingestellt werden, dass sie einen Fehler zurückgeben.