Partilhar via


Visão geral das referências de banco de dados

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

As referências de banco de dados em projetos SQL permitem que você incorpore objetos que não estão incluídos em um projeto vinculando-se a outro projeto, .dacpac arquivo ou pacote NuGet publicado. Os objetos de banco de dados adicionados a um projeto podem fazer parte do mesmo banco de dados, um banco de dados diferente no mesmo servidor ou um banco de dados diferente em um servidor diferente. Para o desenvolvimento do SQL Server, as referências de banco de dados podem ser usadas para vincular a outro banco de dados no mesmo servidor para nomenclatura de três partes ou para vincular a um banco de dados diferente em um servidor diferente para consultas entre bancos de dados. Para bancos de dados com um grande número de objetos em grupos distintos, as referências de banco de dados podem ser usadas para dividir um banco de dados em projetos menores e mais gerenciáveis. O tamanho menor do projeto pode ajudar a melhorar o desempenho e reduzir o tempo necessário para construir um projeto durante o desenvolvimento local iterativo.

Captura de tela de Exemplo de um projeto SQL fazendo referência a um dacpac, um pacote nuget e um projeto para referências de banco de dados.

Note

Referências de projeto e referências de pacote NuGet são os métodos recomendados para referências de banco de dados em novos desenvolvimentos. A referência a pacotes NuGet não é suportada por projetos SQL originais.

Exemplo de arquivo de projeto SQL e sintaxe

As referências de banco de dados são incluídas num projecto através de entradas no ficheiro .sqlproj, semelhante aos projectos C#. Quando uma referência de banco de dados é para um banco de dados diferente no mesmo servidor, um <DatabaseSqlCmdVariable> elemento é incluído na referência do projeto. Quando uma referência de banco de dados é para um banco de dados diferente em um servidor diferente, um <ServerSqlCmdVariable> elemento também é incluído na referência do projeto. As referências de base de dados ao mesmo banco de dados não incluem elementos <ServerSqlCmdVariable> ou <DatabaseSqlCmdVariable>.

Incluindo uma referência específica à referência de banco de dados nos scripts SQL, use variáveis SQLCMD nomeadas no arquivo de projeto para especificar o nome do banco de dados. Por exemplo, o seguinte script SQL faz referência a uma tabela na Warehouse base de dados.

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

Uma referência de banco de dados correspondente à $(Warehouse) variável SQLCMD é incluída no arquivo de projeto e contém <DatabaseSqlCmdVariable>Warehouse</DatabaseSqlCmdVariable>.

Referências do projeto

Neste exemplo, uma referência de projeto é adicionada a um projeto AdventureWorksSalesLT.sqlproj SQL que faz parte do mesmo banco de dados.

  <ItemGroup>
    <ProjectReference Include="..\AdventureWorks\AdventureWorksSalesLT.sqlproj">
      <Name>AdventureWorksSalesLT</Name>
      <Project>{d703fc7a-bc47-4aef-9dc5-cf01094ddb37}</Project>
      <Private>True</Private>
      <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
    </ProjectReference>
  </ItemGroup>

Referências do pacote Dacpac

Mais informações sobre referências de pacote em projetos SQL podem ser encontradas no artigo Referências de pacote de projetos SQL .

Uma referência de pacote ao banco de dados do master sistema para SQL 2022 é mostrada no exemplo a seguir:

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

Referências de artefato Dacpac

As referências a um .dacpac arquivo de artefato diretamente não são recomendadas para novos desenvolvimentos em projetos no estilo SDK. Em vez disso, use referências de pacote NuGet.

Em projetos SQL originais, as referências de arquivo .dacpac são especificadas no arquivo .sqlproj com um item <ArtifactReference>. O exemplo a seguir mostra uma referência a um artefato .dacpac num ficheiro .dacpac em um projeto diferente no mesmo servidor.

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

Adicionar e usar referências de projeto

Adicionar uma referência de projeto

Para adicionar uma referência de projeto a um projeto SQL no Visual Studio, clique com o botão direito do mouse no nó Referências sob o projeto no Gerenciador de Soluções e selecione Adicionar Referência de Banco de Dados.

Captura de tela da caixa de diálogo Visual Studio para referências de banco de dados.

A caixa de diálogo Adicionar referência de banco de dados apresenta opções para adicionar uma referência a:

  • um projeto SQL da mesma solução
  • uma base de dados do sistema (de .dacpac ficheiros incluídos automaticamente no Visual Studio)
  • qualquer arquivo de aplicativo da camada de dados (.dacpac) no sistema de arquivos local

A caixa de diálogo também apresenta uma lista suspensa para escolher os seguintes locais de referência:

  • mesma base de dados
  • banco de dados diferente, mesmo servidor
  • banco de dados diferente, servidor diferente

Para adicionar uma referência de projeto a um projeto SQL, adicione um <ItemGroup> item ao .sqlproj arquivo com um item de referência apropriado para cada referência de banco de dados. Por exemplo, a seguinte referência de projeto é adicionada a um projeto SQL para fazer referência ao WorldWideImporters projeto em um banco de dados diferente em um servidor diferente:

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

A referência do projeto é usada em uma definição de exibição de exemplo no projeto SQL:

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

Para adicionar uma referência de banco de dados a um projeto SQL na extensão Projetos do Banco de Dados SQL, clique com o botão direito do mouse no nó Referências de Banco de Dados sob o projeto na exibição Projetos de Banco de Dados e selecione Adicionar Referência de Banco de Dados.

Captura de ecrã da caixa de diálogo de adição de referência do Azure Data Studio.

Os tipos de referência disponíveis são:

  • Base de dados do sistema
  • Aplicativo da camada de dados (.dacpac)
  • Aplicativo da camada de dados publicado (.nupkg)
  • projecto

A extensão também solicita a seleção dos seguintes locais de referência:

  • mesma base de dados
  • banco de dados diferente, mesmo servidor
  • banco de dados diferente, servidor diferente

Para adicionar uma referência de projeto a um projeto SQL, adicione um <ItemGroup> item ao .sqlproj arquivo com um item de referência apropriado para cada referência de banco de dados. Por exemplo, a seguinte referência de projeto é adicionada a um projeto SQL para fazer referência ao WorldWideImporters projeto em um banco de dados diferente em um servidor diferente:

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

A referência do projeto é usada em uma definição de exibição de exemplo no projeto SQL:

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

Construir com referências de projeto

A criação de um projeto SQL com referências de banco de dados pode exigir configuração extra para garantir que os objetos referenciados estejam disponíveis durante o processo de compilação. Por exemplo, se um projeto está sendo construído em um pipeline de integração contínua (CI), o ambiente do agente de construção precisa ser configurado de forma semelhante ao ambiente de desenvolvimento local.

  • .dacpac referências no projeto SQL exigem que o .dacpac deve estar presente no agente de compilação no mesmo caminho de arquivo relativo tal como especificado no arquivo de projeto.
  • as referências de projeto no projeto SQL exigem que o projeto referenciado esteja presente no agente de compilação no mesmo caminho de arquivo relativo especificado no arquivo de projeto e seja capaz de compilar com êxito no agente de compilação.
  • referências de banco de dados do sistema criadas em projetos SQL originais no Visual Studio exigem que o agente de compilação tenha o Visual Studio instalado.
  • As referências de pacote NuGet no projeto SQL exigem que o pacote seja publicado em um feed NuGet que também é definido como uma fonte de pacote para o agente de compilação.

Publicar com referências de projeto

A publicação de uma .dacpac compilação a partir de um projeto com referências de banco de dados não requer etapas extras. O .dacpac arquivo contém os objetos referenciados e as variáveis SQLCMD especificadas no arquivo de projeto.

Para referências de banco de dados a objetos no mesmo banco de dados, os objetos do projeto referenciado são incluídos no .dacpac arquivo, mas não são incluídos na implantação por padrão. Para incluir os objetos na implantação, use a /p:IncludeCompositeObjects=true opção na ferramenta de linha de comando SqlPackage. Por exemplo, o seguinte comando implanta o AdventureWorks projeto com a /p:IncludeCompositeObjects=true opção de incluir os objetos das referências de base de dados do AdventureWorks.

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

Quando você implanta um .dacpac arquivo com referências de banco de dados para banco de dados diferente (no mesmo servidor ou em servidor diferente), as variáveis SQLCMD especificadas no arquivo de projeto devem ser definidas com os valores corretos para o ambiente de destino. A definição dos valores da variável SQLCMD durante a implantação é feita com a /v opção na ferramenta de linha de comando SqlPackage . Por exemplo, o comando a seguir define a WorldWideImporters variável como WorldWideImporters e a WWIServer variável como localhost:

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