Partilhar via


Referências de pacote de projetos SQL

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase 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, um banco de dados diferente no mesmo servidor ou 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ó é suportada em projetos SQL no estilo SDK.

Referências do 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 construir um projeto durante o desenvolvimento local iterativo.

Captura de tela de Exemplo de um projeto SQL fazendo referência a dois pacotes e um projeto para referências de banco de dados.

Exemplo de arquivo de projeto SQL e sintaxe

As referências de pacote são adicionadas a um projeto SQL por meio de entradas no arquivo .sqlproj, semelhante 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 de 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 de pacote. As referências de pacote ao mesmo banco de dados não incluem elementos <ServerSqlCmdVariable> ou <DatabaseSqlCmdVariable>.

O exemplo a seguir inclui uma referência de pacote para o pacote Contoso.AdventureWorks.SalesLT como uma referência de banco de dados para o mesmo banco de dados onde 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 para o pacote Contoso.AdventureWorks como uma referência de banco de dados para um banco de dados diferente (AdventureWorks) no mesmo servidor onde 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 a versão Contoso.AdventureWorks do pacote 1.1.0 para um feed NuGet. O elemento <DatabaseSqlCmdVariable> especifica o nome do banco de dados no mesmo servidor onde os objetos no pacote estão localizados e seria usado para indicar essa referência em três partes de nomenclatura. A variável SQLCMD 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 elemento <DacpacName> especifica o nome do arquivo .dacpac para a referência do pacote, sem a extensão ou o caminho do arquivo. O elemento <DacpacName> é opcional e só é necessário quando o nome do arquivo .dacpac é diferente do nome do pacote.

Bases de dados do sistema

Os bancos de dados do sistema SQL (master, msdb) são publicados em 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 são versionados 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>

Pequenas alterações de versão refletem correções de bugs e pequenas alterações no esquema dentro de uma versão do SQL Server.

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

Pacotes NuGet dacpac

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 Artefatos do Azure, para uso em projetos SQL. A criação deste pacote segue o mesmo processo de criação de um pacote NuGet para outros tipos de projetos. Para obter mais informações, consulte Criando um pacote com a CLI dotnet.

Captura de ecrã do Resumo do processo de referência de pacote para projetos SQL.

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

Os metadados do pacote podem ser especificados por propriedades dentro do elemento <PropertyGroup> no arquivo .sqlproj. Por exemplo, as propriedades a seguir especificam a ID do pacote, versão, descrição, autores e 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 do NuGet para uso em projetos SQL. Esses objetos de banco de dados podem ser visualizados por qualquer pessoa com acesso ao pacote, portanto, deve-se considerar a seleção de um local de alimentação público ou privado. Para obter mais informações, consulte hospedagem com feeds de pacotes privados.

Ao fazer referência a um pacote em que o PackageId é diferente do nome do arquivo .dacpac, o elemento <DacpacName> é necessário na referência do pacote ao consumir o pacote.

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

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 da 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 para um pacote de regras de análise de código personalizado:

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

O pacote que está a ser referido deve estar disponível num feed do NuGet , tal como o NuGet.org, os Artefactos do Azure ou uma fonte local. Quando um pacote contendo 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 do projeto RunSqlCodeAnalysis é definida como true. As regras podem ser desabilitadas ou elevadas para retornar um erro individualmente nas propriedades do projeto.