Condividi tramite


Oggetti di sistema di progetti SQL

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureDatabase SQL in Microsoft Fabric

I progetti SQL convalidano i riferimenti agli oggetti di database durante il processo di compilazione del progetto. Per impostazione predefinita, i progetti SQL non includono oggetti di sistema nel modello di database, che possono causare errori di convalida se il progetto contiene riferimenti agli oggetti di sistema. Per risolvere questi errori di convalida, è necessario includere un riferimento al database al master.dacpac per la piattaforma di destinazione del tuo progetto.

Il riferimento al master.dacpac database può essere aggiunto come riferimento al pacchetto nei progetti SQL in stile Microsoft.Build.Sql o come riferimento all'artefatto sia in progetti SQL in stile SDK che in progetti SQL originali.

Aggiungere un riferimento al pacchetto

I pacchetti di database di sistema disponibili sono:

Il metodo più diretto per l'aggiunta di un riferimento al pacchetto a un progetto SQL consiste nell'usare l'interfaccia della riga di comando .NET. L'esempio seguente aggiunge un riferimento a un pacchetto per il database di sistema master di Azure SQL a un progetto SQL:

dotnet add <path-to-sqlproj> package Microsoft.SqlServer.Dacpacs.Azure.Master

Questo comando aggiunge la voce seguente al .sqlproj file (la versione del pacchetto rifletterà la versione più recente disponibile al momento dell'esecuzione del comando):

...
    <ItemGroup>
        <PackageReference Include="Microsoft.SqlServer.Dacpacs.Azure.Master" Version="170.0.1" />
    </ItemGroup>
</Project>

Aggiungere un riferimento all'artefatto

Le interfacce dei progetti SQL di VS Code e Visual Studio forniscono un metodo per l'aggiunta di un riferimento dell'artefatto del file master.dacpac per la piattaforma target del progetto.

Le modifiche risultanti al file .sqlproj saranno simili all'esempio seguente, che aggiunge un riferimento a un artefatto nel master database di sistema SQL di Azure in Visual Studio.

<ItemGroup>
    <ArtifactReference Include="$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\AzureV12\SqlSchemas\master.dacpac">
      <HintPath>$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\AzureV12\SqlSchemas\master.dacpac</HintPath>
      <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
      <DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
    </ArtifactReference>
  </ItemGroup>

master.dacpac I file sono referenziati dal punto di installazione delle applicazioni, il che può essere instabile per alcuni sistemi CI/CD. È possibile copiare il master.dacpac file in un percorso all'interno della soluzione e aggiornare gli Include attributi e HintPath in modo che puntino a tale percorso se il sistema di compilazione non include i file di database di sistema.

Database SQL su Fabric

Il database SQL negli oggetti di sistema di Fabric è incluso nel Microsoft.SqlServer.Dacpacs.DbFabric pacchetto, ma potrebbero essere necessari passaggi aggiuntivi per configurare correttamente il riferimento al database SQL nell'ambiente infrastruttura.

Il progetto SQL creato con il controllo del codice sorgente integrato in Fabric include il riferimento al pacchetto e la DatabaseVariableLiteralValue proprietà impostata su master. Questa proprietà è obbligatoria perché il database SQL in Fabric non fornisce l'accesso al master database, ma gli stessi oggetti di sistema possono essere a cui è possibile fare riferimento nel database utente.

Se si crea un nuovo progetto SQL in Visual Studio o VS Code, è necessario aggiornare la DatabaseVariableLiteralValue proprietà in master modo che corrisponda al nome del database usato nel database SQL nell'ambiente fabric.

  <ItemGroup>
    <PackageReference Include="Microsoft.SqlServer.Dacpacs.DbFabric">
      <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
      <DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
      <Version>170.0.0</Version>
    </PackageReference>
  </ItemGroup>