Delen via


Overzicht van databaseverwijzingen

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-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.

Schermopname van een voorbeeld van een SQL-project dat verwijst naar een dacpac, een nuget-pakket en een project voor databaseverwijzingen.

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.

Schermopname van het dialoogvenster Visual Studio voor databaseverwijzingen.

Het dialoogvenster Databasereferentie toevoegen bevat opties voor het toevoegen van een verwijzing naar:

  • een SQL-project van dezelfde oplossing
  • een systeemdatabase (van .dacpac bestanden 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.

Schermopname van het dialoogvenster Referentie toevoegen in Azure Data Studio.

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.

  • .dacpac verwijzingen in het SQL-project vereisen dat de .dacpac aanwezig 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