Dela via


Översikt över databasreferenser

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Förhandsversion av Microsoft Fabric

Med databasreferenser i SQL-projekt kan du införliva objekt som inte ingår i ett projekt genom att länka till ett annat projekt, .dacpac en fil eller ett publicerat NuGet-paket. Databasobjekten som läggs till i ett projekt kan ingå i samma databas, en annan databas på samma server eller en annan databas på en annan server. För SQL Server-utveckling kan databasreferenser användas för att länka till en annan databas på samma server för namngivning i tre delar eller för att länka till en annan databas på en annan server för frågor mellan databaser. För databaser med ett stort antal objekt i distinkta grupper kan databasreferenser användas för att dela upp en databas i mindre, mer hanterbara projekt. Mindre projektstorlek kan bidra till att förbättra prestanda och minska den tid som krävs för att skapa ett projekt under iterativ lokal utveckling.

Skärmbild av Exempel på ett SQL-projekt som refererar till ett dacpac, ett nuget-paket och ett projekt för databasreferenser.

Note

Projektreferenser och NuGet-paketreferenser är de rekommenderade metoderna för databasreferenser i ny utveckling. Att referera till NuGet-paket stöds inte av ursprungliga SQL-projekt.

EXEMPEL och syntax för SQL-projektfil

Databasreferenser ingår i ett projekt via poster i .sqlproj filen, ungefär som C#-projekt. När en databasreferens är till en annan databas på samma server inkluderas ett <DatabaseSqlCmdVariable> element i projektreferensen. När en databasreferens är till en annan databas på en annan server ingår även ett <ServerSqlCmdVariable> element i projektreferensen. Databasreferenser till samma databas inkluderar inte <ServerSqlCmdVariable>- eller <DatabaseSqlCmdVariable>-element.

Om du inkluderar en specifik referens till databasreferensen i SQL-skripten används SQLCMD-variabler med namnet i projektfilen för att ange databasnamnet. Följande SQL-skript refererar till exempel till en tabell i Warehouse databasen:

SELECT ProductId,
       StorageLocation,
       BinNumber
FROM [$(Warehouse)].[Production].[ProductInventory];

En databasreferens som motsvarar $(Warehouse) SQLCMD-variabeln ingår i projektfilen och innehåller <DatabaseSqlCmdVariable>Warehouse</DatabaseSqlCmdVariable>.

Projektreferenser

I det här exemplet läggs en projektreferens till i ett SQL-projekt AdventureWorksSalesLT.sqlproj som ingår i samma databas.

  <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-paketreferenser

Mer information om paketreferenser i SQL-projekt finns i artikeln om SQL-projektpaketreferenser .

En paketreferens till systemdatabasen master för SQL 2022 visas i följande exempel:

  <ItemGroup>
    <PackageReference Include="Microsoft.SqlServer.Dacpacs.Master" Version="160.2.1" />
  </ItemGroup>

Dacpac-artefaktreferenser

Referenser till en .dacpac artefaktfil rekommenderas inte direkt för ny utveckling i SDK-projekt. Använd i stället NuGet-paketreferenser.

I de ursprungliga SQL-projekten anges filreferenser i den .dacpac filen med ett .sqlproj element. I följande exempel visas en .dacpac artefaktreferens till en .dacpac fil i ett annat projekt på samma 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>

Lägga till och använda projektreferenser

Lägga till en projektreferens

Om du vill lägga till en projektreferens till ett SQL-projekt i Visual Studio högerklickar du på noden Referenser under projektet i Solution Explorer och väljer Lägg till databasreferens.

Skärmbild av dialogrutan Visual Studio för databasreferenser.

Dialogrutan Lägg till databasreferens visar alternativ för att lägga till en referens till:

  • ett SQL-projekt från samma lösning
  • en systemdatabas (från .dacpac filer som automatiskt ingår i Visual Studio)
  • alla programfiler på datanivå (.dacpac) i det lokala filsystemet

Dialogrutan innehåller också en listruta för att välja mellan följande referensplatser:

  • samma databas
  • annan databas, samma server
  • annan databas, annan server

Om du vill lägga till en projektreferens till ett SQL-projekt lägger du till ett <ItemGroup> objekt i .sqlproj filen med ett lämpligt referensobjekt för varje databasreferens. Följande projektreferens läggs till i ett SQL-projekt för att referera WorldWideImporters till projektet i en annan databas på en annan 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>

Projektreferensen används i en exempelvydefinition i SQL-projektet:

CREATE VIEW dbo.WorldWide_Products
AS
SELECT ProductID, ProductName, SupplierID
FROM [$(WWIServer)].[$(WorldWideImporters)].[Purchasing].[Suppliers]

Om du vill lägga till en databasreferens till ett SQL-projekt i SQL Database Projects-tillägget högerklickar du på noden Databasreferenser under projektet i vyn Databasprojekt och väljer Lägg till databasreferens.

Skärmbild av dialogrutan Lägg till referens i Azure Data Studio.

De tillgängliga referenstyperna är:

  • systemdatabas
  • datanivåprogram (.dacpac)
  • publicerat datanivåprogram (.nupkg)
  • project

Tillägget uppmanar också att välja från följande referensplatser:

  • samma databas
  • annan databas, samma server
  • annan databas, annan server

Om du vill lägga till en projektreferens till ett SQL-projekt lägger du till ett <ItemGroup> objekt i .sqlproj filen med ett lämpligt referensobjekt för varje databasreferens. Följande projektreferens läggs till i ett SQL-projekt för att referera WorldWideImporters till projektet i en annan databas på en annan 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>

Projektreferensen används i en exempelvydefinition i SQL-projektet:

CREATE VIEW dbo.WorldWide_Products
AS
SELECT ProductID, ProductName, SupplierID
FROM [$(WWIServer)].[$(WorldWideImporters)].[Purchasing].[Suppliers]

Skapa med projektreferenser

Att skapa ett SQL-projekt med databasreferenser kan kräva extra konfiguration för att säkerställa att de refererade objekten är tillgängliga under byggprocessen. Om ett projekt till exempel byggs i en ci-pipeline (kontinuerlig integrering) måste byggagentmiljön konfigureras på samma sätt som den lokala utvecklingsmiljön.

  • .dacpac referenser i SQL-projektet kräver att .dacpac finns närvarande på byggagenten på samma relativa filsökväg som anges i projektfilen.
  • Projektreferenser i SQL-projektet kräver att det refererade projektet måste finnas på byggagenten på samma relativa filsökväg som anges i projektfilen och att det ska kunna byggas framgångsrikt på byggagenten.
  • systemdatabasreferenser som skapats i ursprungliga SQL-projekt i Visual Studio kräver att byggagenten har Visual Studio installerat.
  • NuGet-paketreferenser i SQL-projektet kräver att paketet publiceras till en NuGet-feed som också anges som paketkälla för byggagenten.

Publicera med projektreferenser

Det krävs inga extra steg för att publicera ett projekt som byggts med .dacpac och innehåller databasreferenser. Filen .dacpac innehåller de refererade objekten och SQLCMD-variablerna som anges i projektfilen.

För databasreferenser till objekt i samma databas inkluderas objekten från det refererade projektet i .dacpac filen men ingår inte i distributionen som standard. Om du vill inkludera objekten i distributionen använder du /p:IncludeCompositeObjects=true alternativet i kommandoradsverktyget SqlPackage. Till exempel distribuerar följande kommando projektet AdventureWorks med alternativet /p:IncludeCompositeObjects=true för att inkludera objekt från databasreferenserna till AdventureWorks:

sqlpackage /Action:Publish /SourceFile:AdventureWorks.dacpac /TargetConnectionString:{connection_string_here} /p:IncludeCompositeObjects=true

När du distribuerar en .dacpac fil med databasreferenser till en annan databas (på samma eller annan server) måste de SQLCMD-variabler som anges i projektfilen anges till rätt värden för målmiljön. Du ställer in SQLCMD-variabelvärdena under distributionen /v med alternativet i kommandoradsverktyget SqlPackage . Följande kommando anger till exempel variabeln WorldWideImporters till WorldWideImporters och variabeln WWIServer till localhost:

sqlpackage /Action:Publish /SourceFile:AdventureWorks.dacpac /TargetConnectionString:{connection_string_here} /v:WorldWideImporters=WorldWideImporters /v:WWIServer=localhost