Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric Preview
Met databaseverwijzingen in SQL-projecten kunt u objecten opnemen die niet zijn opgenomen in een project door een koppeling te maken naar een ander project, .dacpac bestand of gepubliceerd NuGet-pakket. De databaseobjecten die aan een project worden toegevoegd, kunnen deel uitmaken van dezelfde database, een andere database op dezelfde server of een andere database op een andere server. Voor SQL Server-ontwikkeling kunnen databaseverwijzingen worden gebruikt om een koppeling te maken naar een andere database op dezelfde server voor driedelige naamgeving of om een koppeling te maken naar een andere database op een andere server voor query's tussen databases. Voor databases met een groot aantal objecten in afzonderlijke groepen kunnen databaseverwijzingen worden gebruikt om een database op te splitsen in kleinere, beter beheerbare projecten. Kleinere projectgrootte kan helpen om de prestaties te verbeteren en de tijd te verkorten die nodig is om een project te bouwen tijdens iteratieve lokale ontwikkeling.
Note
Projectverwijzingen en NuGet-pakketverwijzingen zijn de aanbevolen methoden voor databaseverwijzingen in nieuwe ontwikkeling. Verwijzingen naar NuGet-pakketten worden niet ondersteund door oorspronkelijke SQL-projecten.
Voorbeeld van SQL-projectbestand en syntaxis
Databaseverwijzingen worden in een project opgenomen via vermeldingen in het .sqlproj bestand, vergelijkbaar met C#-projecten. Wanneer een databasereferentie naar een andere database op dezelfde server is, wordt een <DatabaseSqlCmdVariable> element opgenomen in de projectreferentie. Wanneer een databasereferentie naar een andere database op een andere server is, wordt er ook een <ServerSqlCmdVariable> element opgenomen in de projectreferentie. Databaseverwijzingen naar dezelfde database bevatten geen <ServerSqlCmdVariable> of <DatabaseSqlCmdVariable>-elementen.
Als u een specifieke verwijzing naar de databasereferentie in de SQL-scripts opgeeft, gebruikt u SQLCMD-variabelen met de naam in het projectbestand om de databasenaam op te geven. Het volgende SQL-script verwijst bijvoorbeeld naar een tabel in de Warehouse database:
SELECT ProductId,
StorageLocation,
BinNumber
FROM [$(Warehouse)].[Production].[ProductInventory];
Een databasereferentie die overeenkomt met de $(Warehouse) variabele SQLCMD, wordt opgenomen in het projectbestand en bevat <DatabaseSqlCmdVariable>Warehouse</DatabaseSqlCmdVariable>.
Projectverwijzingen
In dit voorbeeld wordt een projectreferentie toegevoegd aan een SQL-project AdventureWorksSalesLT.sqlproj dat deel uitmaakt van dezelfde database.
<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-pakketverwijzingen
Meer informatie over pakketverwijzingen in SQL-projecten vindt u in het artikel SQL-projecten pakketverwijzingen.
In het volgende voorbeeld wordt een pakketreferentie naar de master systeemdatabase voor SQL 2022 weergegeven:
<ItemGroup>
<PackageReference Include="Microsoft.SqlServer.Dacpacs.Master" Version="160.2.1" />
</ItemGroup>
Dacpac-artefactverwijzingen
Verwijzingen naar een .dacpac artefactbestand worden niet rechtstreeks aanbevolen voor nieuwe ontwikkeling in SDK-projecten. Gebruik in plaats daarvan NuGet-pakketverwijzingen.
In oorspronkelijke SQL-projecten worden bestandsverwijzingen in het .dacpac bestand opgegeven met een .sqlproj item. In het volgende voorbeeld ziet u een .dacpac artefactreferentie naar een .dacpac bestand in een ander project op dezelfde server:
<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>
Projectverwijzingen toevoegen en gebruiken
Een projectreferentie toevoegen
Als u een projectverwijzing wilt toevoegen aan een SQL-project in Visual Studio, klikt u met de rechtermuisknop op het knooppunt Verwijzingen onder het project in Solution Explorer en selecteert u Databaseverwijzing toevoegen.
Het dialoogvenster Databasereferentie toevoegen bevat opties voor het toevoegen van een verwijzing naar:
- een SQL-project van dezelfde oplossing
- een systeemdatabase (van
.dacpacbestanden die automatisch zijn opgenomen in Visual Studio) - elk toepassingsbestand (
.dacpac) in de gegevenslaag op het lokale bestandssysteem
Het dialoogvenster bevat ook een vervolgkeuzelijst waarmee u kunt selecteren uit de volgende referentielocaties:
- dezelfde database
- andere database, dezelfde server
- verschillende database, verschillende server
Als u een projectreferentie wilt toevoegen aan een SQL-project, voegt u een <ItemGroup> item toe aan het .sqlproj bestand met een geschikt referentie-item voor elke databasereferentie. De volgende projectreferentie wordt bijvoorbeeld toegevoegd aan een SQL-project om te verwijzen naar het WorldWideImporters project in een andere database op een andere server:
<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>
De projectreferentie wordt gebruikt in een voorbeeldweergavedefinitie in het SQL-project:
CREATE VIEW dbo.WorldWide_Products
AS
SELECT ProductID, ProductName, SupplierID
FROM [$(WWIServer)].[$(WorldWideImporters)].[Purchasing].[Suppliers]
Als u een databaseverwijzing wilt toevoegen aan een SQL-project in de extensie SQL Database Projects, klikt u met de rechtermuisknop op het knooppunt Databaseverwijzingen onder het project in de weergave Databaseprojecten en selecteert u Databaseverwijzing toevoegen.
De beschikbare referentietypen zijn:
- systeemdatabase
- gegevenslaagtoepassing (
.dacpac) - gepubliceerde gegevenslaagtoepassing (
.nupkg) - project
De extensie vraagt ook om een keuze te maken uit de volgende referentielocaties:
- dezelfde database
- andere database, dezelfde server
- verschillende database, verschillende server
Als u een projectreferentie wilt toevoegen aan een SQL-project, voegt u een <ItemGroup> item toe aan het .sqlproj bestand met een geschikt referentie-item voor elke databasereferentie. De volgende projectreferentie wordt bijvoorbeeld toegevoegd aan een SQL-project om te verwijzen naar het WorldWideImporters project in een andere database op een andere server:
<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>
De projectreferentie wordt gebruikt in een voorbeeldweergavedefinitie in het SQL-project:
CREATE VIEW dbo.WorldWide_Products
AS
SELECT ProductID, ProductName, SupplierID
FROM [$(WWIServer)].[$(WorldWideImporters)].[Purchasing].[Suppliers]
Bouwen met projectverwijzingen
Voor het bouwen van een SQL-project met databaseverwijzingen is mogelijk extra configuratie vereist om ervoor te zorgen dat de objecten waarnaar wordt verwezen beschikbaar zijn tijdens het buildproces. Als een project bijvoorbeeld wordt gebouwd in een CI-pijplijn (continue integratie), moet de omgeving van de buildagent op dezelfde manier worden ingesteld als de lokale ontwikkelomgeving.
-
.dacpacverwijzingen in het SQL-project vereisen dat de.dacpacaanwezig zijn op de buildagent op hetzelfde relatieve bestandspad als opgegeven in het projectbestand. - voor projectverwijzingen in het SQL-project moet het project waarnaar wordt verwezen aanwezig zijn op de buildagent op hetzelfde relatieve bestandspad als opgegeven in het projectbestand en kunnen worden gebouwd op de buildagent.
- systeemdatabaseverwijzingen die zijn gemaakt in oorspronkelijke SQL-projecten in Visual Studio, vereisen dat Visual Studio is geïnstalleerd voor de buildagent.
- Voor NuGet-pakketverwijzingen in het SQL-project moet het pakket worden gepubliceerd naar een NuGet-feed die ook is ingesteld als pakketbron voor de buildagent.
Publiceren met projectverwijzingen
Voor het publiceren van een .dacpac gebouwd op basis van een project met databaseverwijzingen zijn geen extra stappen vereist. Het .dacpac bestand bevat de objecten waarnaar wordt verwezen en de SQLCMD-variabelen die zijn opgegeven in het projectbestand.
Voor databaseverwijzingen naar objecten in dezelfde database worden de objecten uit het project waarnaar wordt verwezen, opgenomen in het .dacpac bestand, maar niet standaard opgenomen in de implementatie. Als u de objecten in de implementatie wilt opnemen, gebruikt u de /p:IncludeCompositeObjects=true optie in het opdrachtregelprogramma SqlPackage. Met de volgende opdracht wordt bijvoorbeeld het AdventureWorks project geïmplementeerd met de /p:IncludeCompositeObjects=true optie om de objecten van databaseverwijzingen naar AdventureWorks op te nemen:
sqlpackage /Action:Publish /SourceFile:AdventureWorks.dacpac /TargetConnectionString:{connection_string_here} /p:IncludeCompositeObjects=true
Wanneer u een .dacpac bestand implementeert met databaseverwijzingen naar een andere database (op dezelfde of een andere server), moeten de SQLCMD-variabelen die in het projectbestand zijn opgegeven, worden ingesteld op de juiste waarden voor de doelomgeving. Het instellen van de waarden van de SQLCMD-variabele tijdens de implementatie wordt uitgevoerd met de /v optie in het opdrachtregelprogramma SqlPackage . Met de volgende opdracht wordt bijvoorbeeld de WorldWideImporters variabele ingesteld WorldWideImporters op en de WWIServer variabele op localhost:
sqlpackage /Action:Publish /SourceFile:AdventureWorks.dacpac /TargetConnectionString:{connection_string_here} /v:WorldWideImporters=WorldWideImporters /v:WWIServer=localhost