Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Base de Dados SQL do Azure
Azure SQL Managed Instance
Base 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 base de dados que adicionas a um projeto podem fazer parte da mesma base de dados, de uma base de dados diferente no mesmo servidor, ou de uma base de dados diferente num servidor diferente. Para o desenvolvimento do SQL Server, use referências de base de dados para ligar a outra base de dados no mesmo servidor para nomes em três partes, ou para ligar a uma base de dados diferente num servidor diferente para consultas entre bases de dados. Para bases de dados com um grande número de objetos em grupos distintos, use referências de base de dados para dividir uma base de dados em projetos mais pequenos e geríveis. Um projeto de menor dimensão pode ajudar a melhorar o desempenho e a reduzir o tempo necessário para construir um projeto durante o desenvolvimento local iterativo.
Note
Use referências de projeto e referências de pacotes NuGet para referências de bases de dados em novos desenvolvimentos. Os projetos SQL originais não suportam a referência a pacotes NuGet.
Exemplo de arquivo de projeto SQL e sintaxe
Incluir referências à base de dados num projeto através de entradas no .sqlproj ficheiro, semelhante a projetos C#. Use a sintaxe SQLCMD para referenciar o nome da base de dados nos objetos do projeto SQL. Quando uma referência de base de dados aponta para uma base de dados diferente no mesmo servidor, inclua um <DatabaseSqlCmdVariable> elemento na referência do projeto. Quando uma referência de base de dados aponta para uma base de dados diferente num servidor diferente, inclua também um <ServerSqlCmdVariable> elemento na referência do projeto. As referências de base de dados ao mesmo banco de dados não incluem elementos <ServerSqlCmdVariable> ou <DatabaseSqlCmdVariable>.
Para incluir uma referência específica à referência da base de dados nos scripts SQL, use variáveis SQLCMD nomeadas no ficheiro do projeto para especificar o nome da base 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];
O ficheiro do projeto inclui uma referência de base de dados correspondente à $(Warehouse) variável SQLCMD e contém <DatabaseSqlCmdVariable>Warehouse</DatabaseSqlCmdVariable>.
Nomenclatura em três partes na mesma base de dados
Quando um objeto num projeto SQL faz referência a outro objeto na mesma base de dados, a nomeação em três partes não é necessária, mesmo que os objetos estejam incluídos através de uma referência de base de dados. No entanto, os projetos SQL incorporam uma variável SQLCMD automática para o nome da base de dados, que pode usar em scripts SQL para referenciar a base de dados do projeto sem codificar o nome de forma fixa. Se for necessária a nomenclatura de três partes, use $(DatabaseName) nos seus scripts SQL para referenciar a base de dados. Por exemplo, o seguinte script SQL faz referência a uma tabela na base de dados do projeto:
UPDATE [$(DatabaseName)].[SalesLT].[Customer]
SET [SalesPerson] = 'John Doe',
[ModifiedDate] = GETDATE()
WHERE [CustomerId] = @CustomerId;
Valores literais da base de dados
Em alguns casos, pode ser necessário usar um valor literal (não variável) para o nome da base de dados a partir de uma referência de base de dados nos seus objetos SQL. Podes configurar o .sqlproj ficheiro para especificar um valor literal para o nome de uma base de dados em vez de usar uma variável SQLCMD. O elemento usado para especificar um valor literal é <DatabaseLiteralValue>. Se usares este elemento, não uses o elemento <DatabaseSqlCmdVariable>. Dentro do <DatabaseLiteralValue> elemento, especifica o valor literal para o nome da base de dados. Por exemplo, uma referência de base de dados com <DatabaseVariableLiteralValue>WarehouseDB</DatabaseVariableLiteralValue> é usada num script SQL da seguinte forma:
SELECT ProductId,
StorageLocation,
BinNumber
FROM [WarehouseDB].[Production].[ProductInventory];
Referências do projeto
Neste exemplo, adiciona-se uma referência de projeto a um projeto SQL nomeado AdventureWorksSalesLT.sqlproj que faz parte da mesma base 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
Para mais informações sobre referências de pacotes em projetos SQL, consulte referências de pacotes de projetos SQL.
O exemplo seguinte mostra uma referência de pacote à master base de dados do sistema para o SQL Server 2022:
<ItemGroup>
<PackageReference Include="Microsoft.SqlServer.Dacpacs.Master" Version="160.2.1" />
</ItemGroup>
Referências de artefato Dacpac
Não utilize referências diretas a um ficheiro de artefacto .dacpac em novo desenvolvimento em projetos do tipo SDK. Em vez disso, use referências de pacote NuGet.
Em projetos SQL originais, especifica referências a ficheiros .dacpac no ficheiro .sqlproj utilizando um elemento <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.
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
.dacpacficheiros 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.
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]
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 estiver a construir um projeto num pipeline de integração contínua (CI), precisa de configurar o ambiente do agente de construção de forma semelhante ao ambiente de desenvolvimento local.
-
.dacpacreferências no projeto SQL exigem que o.dacpacdeve 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 relativo do ficheiro especificado no ficheiro de projeto e que possa ser compilado com sucesso no agente de compilação.
- As referências de bases 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 implementas um .dacpac ficheiro com referências de base de dados para bases de dados diferentes (no mesmo servidor ou noutro servidor), define as variáveis SQLCMD especificadas no ficheiro do projeto para os valores corretos para o ambiente de destino. Defina os valores das variáveis SQLCMD durante a implementação usando a /v opção na ferramenta de linha de comandos SqlPaket . 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