Compartilhar via


Referências de pacotes de projetos SQL

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureBanco de dados SQL no Microsoft Fabric

As referências de pacote em projetos SQL permitem que você faça referência a objetos de banco de dados de outros projetos ou pacotes NuGet. Os objetos de banco de dados adicionados a um projeto por meio de referências de pacote podem fazer parte do mesmo banco de dados, de um banco de dados diferente no mesmo servidor ou de um banco de dados diferente em um servidor diferente.

Note

As referências de pacote são o método recomendado para referenciar objetos de banco de dados em novos desenvolvimentos. A referência a pacotes NuGet só tem suporte em projetos SQL no estilo SDK.

Referências a um pacote de objeto de banco de dados

As referências de pacote são um dos vários métodos para adicionar objetos de banco de dados a um projeto SQL como uma referência de banco de dados. As referências de pacote podem conter objetos para o mesmo banco de dados, um banco de dados diferente no mesmo servidor ou um banco de dados diferente em um servidor diferente. As referências de pacote podem ser usadas para dividir um banco de dados em projetos menores e mais gerenciáveis, o que pode ajudar a reduzir o tempo necessário para criar um projeto durante o desenvolvimento local iterativo.

Captura de tela de exemplo de um projeto SQL referenciando dois pacotes e um projeto para referências de banco de dados.

Exemplo e sintaxe do arquivo de projeto SQL

As referências de pacote são adicionadas a um projeto SQL por meio de entradas no arquivo .sqlproj, semelhantes aos projetos C#. Quando uma referência de pacote é para um banco de dados diferente no mesmo servidor, um elemento <DatabaseSqlCmdVariable> é incluído na referência do pacote. Quando uma referência de pacote é para um banco de dados diferente em um servidor diferente, um elemento <ServerSqlCmdVariable> também é incluído na referência do pacote. As referências de pacotes para o mesmo banco de dados não incluem elementos <ServerSqlCmdVariable> ou <DatabaseSqlCmdVariable>.

O exemplo a seguir inclui uma referência de pacote ao pacote Contoso.AdventureWorks.SalesLT como uma referência de banco de dados para o mesmo banco de dados em que os objetos no pacote se tornam parte do modelo de banco de dados no projeto SQL:

...
  <ItemGroup>
    <PackageReference Include="Contoso.AdventureWorks.SalesLT" Version="1.1.0" />
  </ItemGroup>
</Project>

O exemplo a seguir inclui uma referência de pacote ao Contoso.AdventureWorks pacote como uma referência de banco de dados para um banco de dados diferente (AdventureWorks) no mesmo servidor em que os objetos no pacote se tornam parte do modelo de banco de dados no projeto SQL:

...
  <ItemGroup>
    <PackageReference Include="Contoso.AdventureWorks" Version="1.1.0">
      <DatabaseSqlCmdVariable>AdventureDB</DatabaseSqlCmdVariable>
      <DacpacName>AdventureWorks</DacpacName>
    </PackageReference>
  </ItemGroup>
  <ItemGroup>
    <SqlCmdVariable Include="AdventureDB">
      <DefaultValue>AdventureWorks</DefaultValue>
      <Value>$(SqlCmdVar__1)</Value>
    </SqlCmdVariable>
  </ItemGroup>
</Project>

Neste exemplo, o arquivo AdventureWorks .dacpac é publicado como uma versão Contoso.AdventureWorks do pacote 1.1.0 em um feed do NuGet. O <DatabaseSqlCmdVariable> elemento especifica o nome do banco de dados no mesmo servidor em que os objetos no pacote estão localizados e seria usado para indicar essa referência na nomenclatura de três partes. A variável AdventureDB é usada para definir o nome do banco de dados no momento da implantação e é usada no projeto de forma semelhante a esta consulta de exemplo:

SELECT * FROM [$(AdventureDB)].dbo.Customers;

O <DacpacName> elemento especifica o nome do .dacpac arquivo para a referência do pacote, sem a extensão ou o caminho do arquivo. O <DacpacName> elemento é opcional e só é necessário quando o nome do .dacpac arquivo é diferente do nome do pacote.

Bancos de dados do sistema

Os bancos de dados do sistema SQL (master, msdb) são publicados no NuGet.org como pacotes de referência de banco de dados. Esses pacotes contêm o esquema para os bancos de dados do sistema e podem ser usados como referências de pacote em projetos SQL. Os pacotes de banco de dados do sistema têm controle de versão para se alinharem com a versão do SQL Server à qual estão associados. Por exemplo, o pacote de banco de dados do sistema master para SQL Server 2022 é Microsoft.SqlServer.Dacpacs.Master versão 160.2.1 e pode ser adicionado a um projeto SQL como uma referência de pacote:

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

As alterações de versões secundárias refletem correções de bugs e pequenas alterações no esquema em uma versão do SQL Server.

Os pacotes disponíveis dos bancos de dados do sistema são:

Empacotar pacotes NuGet com dacpacs

Um pacote de referência de banco de dados é um pacote NuGet que contém um arquivo .dacpac. O pacote NuGet pode ser publicado em um feed NuGet, como Azure Artifacts, para uso em projetos SQL. A criação desse pacote segue o mesmo processo que a criação de um pacote NuGet para outros tipos de projetos. Para obter mais informações, confira Criando um pacote com a CLI do dotnet.

Captura de tela do Resumo da referência de pacote para o processo de projetos SQL.

Para encapsular um arquivo .sqlproj como um pacote NuGet, use o comando dotnet pack da linha de comando. Por padrão, o comando dotnet pack cria um pacote NuGet do arquivo .sqlproj na pasta bin/Debug.

Os metadados do pacote podem ser especificados pelas propriedades dentro do elemento <PropertyGroup> no arquivo .sqlproj. Por exemplo, as seguintes propriedades especificam a ID do pacote, a versão, a descrição, os autores e a empresa:

<PackageId>Contoso.AdventureWorks.SalesLT</PackageId>
<Version>1.0.0</Version>
<Description>AdventureWorks database SalesLT objects</Description>
<Authors>DevTeam</Authors>
<Company>Contoso Outdoors</Company>

O arquivo .nupkg criado pelo comando dotnet pack pode ser publicado em um feed NuGet para uso em projetos SQL. Esses objetos de banco de dados podem ser exibidos por qualquer pessoa com acesso ao pacote, portanto, deve-se considerar a seleção de um local de feed público ou privado. Para obter mais informações, confira Hospedagem com feeds de pacotes privados.

Ao referenciar um pacote em que o PackageId é diferente do nome do arquivo .dacpac, o elemento <DacpacName> é necessário na referência do pacote ao consumi-lo.

Referências de pacote de regras de análise de código estendido

As referências de pacote também podem ser usadas para fazer referência a mais regras de análise de código que foram desenvolvidas como parte da extensibilidade de análise de código. A referência de pacote para um pacote de regra de análise de código é semelhante à referência de pacote para um pacote de objeto de banco de dados. O exemplo a seguir mostra uma referência de pacote a um pacote de regras de análise de código personalizado:

<ItemGroup>
  <PackageReference Include="Your.CustomCode.AnalysisRules" Version="1.2.3" />
</ItemGroup>

O pacote referenciado deve estar disponível em um feed do NuGet, como NuGet.org, Azure Artifacts ou uma fonte local. Quando um pacote que contém regras de análise de código é referenciado, as regras são incluídas automaticamente no projeto SQL e são avaliadas quando a propriedade RunSqlCodeAnalysis do projeto é definida como true. As regras podem ser desabilitadas ou elevadas para retornar um erro individualmente nas propriedades do projeto.