Condividi tramite


Panoramica dei riferimenti al database

Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure database SQL in Microsoft Fabric

I riferimenti al database nei progetti SQL consentono di incorporare oggetti non inclusi in un progetto collegando un altro progetto, un file .dacpac o un pacchetto NuGet pubblicato. Gli oggetti di database aggiunti a un progetto possono far parte dello stesso database, di un database diverso nello stesso server o di un database diverso in un server diverso. Per lo sviluppo di SQL Server, è possibile usare i riferimenti al database per collegarsi a un altro database nello stesso server per la denominazione in tre parti o per collegarsi a un database diverso in un server diverso per le query tra database. Per i database con un numero elevato di oggetti in gruppi distinti, è possibile usare i riferimenti al database per suddividere un database in progetti più piccoli e gestibili. Le dimensioni del progetto più piccole consentono di migliorare le prestazioni e ridurre il tempo necessario per compilare un progetto durante lo sviluppo locale iterativo.

Screenshot dell'esempio di un progetto SQL che fa riferimento a un pacchetto dacpac, a un pacchetto nuget e a un progetto per i riferimenti al database.

Nota

I riferimenti ai progetti e i riferimenti ai pacchetti NuGet sono i metodi consigliati per i riferimenti al database in un nuovo sviluppo. Il riferimento ai pacchetti NuGet non è supportato dai progetti SQL originali.

Esempio e sintassi del file di progetto SQL

I riferimenti al database sono inclusi in un progetto tramite voci nel file .sqlproj, simili ai progetti C#. Quando un riferimento al database si riferisce a un database diverso nello stesso server, un elemento <DatabaseSqlCmdVariable> viene incluso nel riferimento al progetto. Quando un riferimento al database si riferisce a un database diverso in un servr diverso, un elemento <ServerSqlCmdVariable> viene incluso anche nel riferimento al progetto. I riferimenti al database allo stesso database non includono gli elementi <ServerSqlCmdVariable> o <DatabaseSqlCmdVariable>.

L'inclusione di un riferimento specifico al riferimento al database negli script SQL usa le variabili SQLCMD denominate nel file di progetto per specificare il nome del database. Ad esempio, lo script SQL seguente fa riferimento a una tabella nel database Warehouse:

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

Un riferimento al database corrispondente alla variabile SQLCMD $(Warehouse) è incluso nel file di progetto e contiene <DatabaseSqlCmdVariable>Warehouse</DatabaseSqlCmdVariable>.

Riferimenti al progetto

In questo esempio viene aggiunto un riferimento al progetto a un progetto SQL AdventureWorksSalesLT.sqlproj che fa parte dello stesso 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>

Riferimenti al pacchetto Dacpac

Altre informazioni sui riferimenti ai pacchetti nei progetti SQL sono disponibili nell'articolo Riferimenti ai pacchetti di progetti SQL.

Un riferimento al pacchetto per il database di sistema master per SQL 2022 è illustrato nell'esempio seguente:

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

Riferimenti all'artefatto Dacpac

I riferimenti diretti a un file di artefatto .dacpac non sono consigliati per i nuovi progetti in stile SDK. Usare invece riferimenti al pacchetto NuGet.

Nei progetti SQL originali, i riferimenti ai file .dacpac vengono specificati nel file .sqlproj con un elemento <ArtifactReference>. L'esempio seguente mostra un riferimento di artefatto .dacpac a un file .dacpac in un progetto diverso nello stesso 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>

Aggiungere e usare riferimenti al progetto

Aggiungere un riferimento al progetto

Per aggiungere un riferimento al progetto a un progetto SQL in Visual Studio, fare clic con il pulsante destro del mouse sul nodo Riferimenti nel progetto in Esplora soluzioni e selezionare Aggiungi riferimento al database.

Screenshot della finestra di dialogo Visual Studio per i riferimenti al database.

La finestra di dialogo Aggiungi riferimento al database presenta le opzioni per l'aggiunta di un riferimento a:

  • un progetto SQL dalla stessa soluzione
  • un database di sistema (da file .dacpac inclusi automaticamente in Visual Studio)
  • qualsiasi file dell'applicazione livello dati (.dacpac) nel file system locale

La finestra di dialogo fornisce anche un elenco a discesa da selezionare dai percorsi di riferimento seguenti:

  • stesso database
  • database diverso, stesso server
  • database diverso, server diverso

Per aggiungere un riferimento al progetto a un progetto SQL, aggiungere un elemento <ItemGroup> al file .sqlproj con un elemento di riferimento appropriato per ogni riferimento al database. Ad esempio, il riferimento di progetto seguente viene aggiunto a un progetto SQL per fare riferimento al progetto WorldWideImporters in un database diverso in un server diverso:

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

Il riferimento al progetto viene usato in una definizione di vista di esempio nel progetto SQL:

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

Per aggiungere un riferimento al database a un progetto SQL nell'estensione progetti database SQL, fare clic con il pulsante destro del mouse sul nodo Riferimenti database nel progetto nella vista Progetti di database e scegliere Aggiungi riferimento al database.

Screenshot della finestra di dialogo di riferimento di Azure Data Studio.

I tipi di riferimento disponibili sono:

  • database di sistema
  • applicazione livello dati (.dacpac)
  • applicazione livello dati pubblicata (.nupkg)
  • progetto

L'estensione richiede anche di selezionare tra i percorsi di riferimento seguenti:

  • stesso database
  • database diverso, stesso server
  • database diverso, server diverso

Per aggiungere un riferimento al progetto a un progetto SQL, aggiungere un elemento <ItemGroup> al file .sqlproj con un elemento di riferimento appropriato per ogni riferimento al database. Ad esempio, il riferimento di progetto seguente viene aggiunto a un progetto SQL per fare riferimento al progetto WorldWideImporters in un database diverso in un server diverso:

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

Il riferimento al progetto viene usato in una definizione di vista di esempio nel progetto SQL:

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

Compilazione con riferimenti al progetto

La compilazione di un progetto SQL con riferimenti al database potrebbe richiedere una configurazione aggiuntiva per assicurarsi che gli oggetti a cui si fa riferimento siano disponibili durante il processo di compilazione. Ad esempio, se un progetto viene compilato in una pipeline di integrazione continua (CI), l'ambiente dell'agente di compilazione deve essere configurato in modo analogo all'ambiente di sviluppo locale.

  • I riferimenti .dacpac nel progetto SQL richiedono che l'oggetto .dacpac sia presente nell'agente di compilazione nello stesso percorso di file relativo specificato nel file di progetto.
  • I riferimenti di progetto nel progetto SQL richiedono che il progetto a cui si fa riferimento sia presente nell'agente di compilazione nello stesso percorso di file relativo specificato nel file di progetto e che sia in grado di eseguire correttamente la compilazione nell'agente di compilazione.
  • I riferimenti al database di sistema creati nei progetti SQL originali in Visual Studio richiedono l'installazione di Visual Studio per l'agente di compilazione.
  • I riferimenti al pacchetto NuGet nel progetto SQL richiedono che il pacchetto venga pubblicato in un feed NuGet impostato anche come origine del pacchetto per l'agente di compilazione.

Pubblicare con riferimenti al progetto

La pubblicazione di un oggetto compilato .dacpac da un progetto con riferimenti al database non richiede passaggi aggiuntivi. Il file .dacpac contiene gli oggetti a cui si fa riferimento e le variabili SQLCMD specificate nel file di progetto.

Per i riferimenti di database agli oggetti nello stesso database, gli oggetti del progetto a cui si fa riferimento sono inclusi nel file .dacpac, ma non sono inclusi nella distribuzione per impostazione predefinita. Per includere gli oggetti nella distribuzione, usare l'opzione /p:IncludeCompositeObjects=true nello strumento riga di comando SqlPackage. Ad esempio, il comando seguente distribuisce il progetto AdventureWorks con l'opzione /p:IncludeCompositeObjects=true per includere gli oggetti dai riferimenti di database a AdventureWorks:

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

Quando si distribuisce un file .dacpac con riferimenti di database a database diversi (nello stesso server o in un server diverso), le variabili SQLCMD specificate nel file di progetto devono essere impostate sui valori corretti per l'ambiente di destinazione. L'impostazione dei valori delle variabili SQLCMD durante la distribuzione viene eseguita con l'opzione /v nello strumento riga di comando SqlPackage. Ad esempio, il comando seguente imposta la variabile WorldWideImporters su WorldWideImporters e la variabile WWIServer su localhost:

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