O que são projetos de banco de dados SQL?

Aplica-se a: SQL Server 2022 (16.x) Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Um projeto de banco de dados SQL é uma representação local de objetos SQL que compõem o esquema de um banco de dados individual, como tabelas, procedimentos armazenados ou funções. O ciclo de desenvolvimento de um projeto de banco de dados SQL permite que o desenvolvimento de banco de dados seja integrado a fluxos de trabalho de CI/CD (integração contínua e implantação contínua) familiarizados como uma prática recomendada de desenvolvimento.

Visão geral

Os projetos SQL são baseados em instruções T-SQL declarativas. No código do projeto de banco de dados SQL, você cria cada objeto uma vez. Se você precisar alterar algo sobre esse objeto, como adicionar colunas ou alterar um tipo de dados, modifique o arquivo singular que declara o objeto pela primeira e única vez.

Quando um projeto de banco de dados SQL é criado, o artefato de saída é um arquivo .dacpac. Bancos de dados novos e existentes podem ser atualizados para corresponder ao conteúdo do .dacpac publicando o .dacpac em um banco de dados de destino.

O banco de dados SQL projeta a estrutura em torno do código do banco de dados que adiciona dois recursos básicos a esse conjunto de arquivos com seu processo de build:

  • validação de referências entre objetos e a sintaxe em relação a uma versão específica do SQL
  • implantação do artefato de compilação em bancos de dados novos ou existentes

Captura de tela do resumo dos projetos de banco de dados SQL contendo scripts anteriores a posteriores à implementação, bem como objetos de banco de dados.

A funcionalidade para projetos de banco de dados SQL é fornecida pela biblioteca .NET Microsoft.SqlServer.DacFx e é exibida em várias ferramentas para desenvolvimento de SQL. O DacFx tem vários pontos de extensibilidade, como modificação de etapas de implantação e a capacidade de criar regras personalizadas para análise de código. O SDK do projeto para projetos SQL é o Microsoft.Build.Sql, atualmente disponível em versão prévia e aconselhado para novos desenvolvimentos.

Validação

Quando um projeto SQL é criado, as relações entre os objetos são validadas. Por exemplo, uma definição de exibição não pode conter uma tabela ou colunas que não existem no projeto SQL.

Além disso, um projeto SQL contém uma propriedade em seu arquivo .sqlproj chamada "plataforma de destino". Essas informações são usadas durante o processo de build para validar se as funções e a sintaxe T-SQL existem nessa versão do SQL. Por exemplo, as funções JSON adicionadas no SQL Server 2022 não podem ser usadas em um projeto SQL definido para a plataforma de destino Sql140 (SQL Server 2017).

Para criar um projeto SQL, executamos dotnet build na linha de comando. Em ferramentas gráficas que dão suporte a projetos SQL (Azure Data Studio, VS Code e Visual Studio), há um item de menu para criar o projeto SQL.

A saída do console do processo de build pode conter erros (falha no build) ou avisos. Os avisos de build podem incluir maiúsculas e minúsculas inconsistentes em nomes de objetos e outras práticas recomendadas personalizáveis, mas não falham no build.

A saída do artefato do processo de construção é um arquivo .dacpac, que pode ser encontrado para uma compilação com configurações padrão na pasta bin/Debug.

Implantação

O arquivo de saída, o .dacpac, é um artefato poderoso, reutilizável e declarativo. Com esse arquivo, podemos usar o SqlPackage ou outras ferramentas para aplicar nosso código de banco de dados a um banco de dados. O comando SqlPackage para implantar um .dacpac é o comando publish.

Captura de tela da visão geral do processo de build do projeto SQL para dacpac e implantação no banco de dados.

Por exemplo, sqlpackage /Action:Publish /SourceFile:yourfile.dacpac /TargetConnectionString:{yourconnectionstring}.

Novos bancos de dados

O SqlPackage navega pelas relações de objeto para criar cada objeto na ordem correta ao publicar um dacpac em um novo banco de dados. Por exemplo, SqlPackage cria Table_A antes de Table_B quando Table_B tem uma chave estrangeira para Table_A.

Você não quer executar uma pasta inteira de scripts SQL, especialmente quando você pode estar usando projetos SQL que executam automaticamente cada seção T-SQL na ordem correta com base nas relações de objeto.

Bancos de dados existentes

Além de navegar na hierarquia de objetos ao publicar em novos bancos de dados, o processo de publicação .dacpac também calcula a diferença entre um .dacpac de origem e um banco de dados de destino antes de determinar quais etapas são necessárias para atualizar esse banco de dados. Por exemplo, se estiverem faltando duas colunas no banco de dados da Table_C que ele tem no projeto SQL e StoredProcedure_A foi alterado, o SqlPackage criará uma instrução ALTER TABLE e uma instrução ALTER PROCEDURE em vez de tentar criar cegamente um monte de objetos.

Captura de tela de exemplo de instrução alter table calculada por implantação.

A flexibilidade fornecida pelo comando publish para bancos de dados existentes não se limita a um único banco de dados. Um .dacpac pode ser implantado várias vezes, como ao atualizar uma frota de cem bancos de dados.

Quando usar

Os projetos de banco de dados SQL são uma ótima opção para equipes que desejam integrar o desenvolvimento de banco de dados a um fluxo de trabalho de CI/CD. A natureza declarativa dos projetos SQL permite uma fonte única de verdade para o esquema de banco de dados, e o processo de build e publicação fornece uma maneira repetível e confiável de implantar alterações em bancos de dados.

Os projetos de banco de dados SQL são usados para acompanhar a fonte de verdade para o estado do banco de dados, incluindo o desenvolvimento com um ORM (mapeador relacional de objeto), como o EF Core. Uma ferramenta gráfica ou a linha de comando pode ser usada para extrair o esquema de um banco de dados para um projeto SQL, independentemente do ORM usado para criar o banco de dados.

Captura de tela do VS Code com o projeto SQL do AdventureWorks aberto, exibindo uma tabela no editor.

Os projetos de banco de dados SQL dão suporte à família de bancos de dados SQL Server e SQL do Azure, incluindo o Banco de Dados SQL do Azure e o Azure Synapse Analytics. Se você estiver desenvolvendo um aplicativo ou um data warehouse, os projetos de banco de dados SQL podem ser usados para gerenciar o esquema do seu banco de dados. Os projetos SQL podem ser desenvolvidos em ferramentas do Visual Studio, VS Code e Azure Data Studio.

Projetos originais versus projetos no estilo SDK (versão prévia)

O formato original do projeto SQL é baseado no MSBuild (.NET Framework) e é o formato usado pelo SQL Server Data Tools no Visual Studio. O formato de projeto no estilo SDK é baseado nos novos projetos no estilo SDK introduzidos no .NET Core e é o formato usado pela extensão de Projetos do Banco de Dados SQL para Azure Data Studio e VS Code. O suporte para projetos SQL no estilo SDK no Visual Studio está no roteiro.

O novo trabalho de desenvolvimento deve considerar o uso do formato de projeto no estilo SDK, pois é o formato que terá suporte no futuro. O formato de projeto no estilo SDK é mais flexível e contém novos recursos não disponíveis nos projetos SQL originais:

  • Suporte ao .NET 8 (multiplataforma)
  • Referências de pacote NuGet para referências de banco de dados
  • Padrão de globbing padrão para arquivos .sql no projeto

Os projetos no estilo SDK têm um superconjunto de funcionalidades de projetos SQL originais e os projetos SQL existentes podem ser convertidos em projetos no estilo SDK por meio da modificação do arquivo de projeto. A exceção à cobertura de funcionalidade é o suporte para objetos SQLCLR, que exigem .NET Framework e não têm suporte em projetos no estilo SDK.