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 SQL do Azure
banco de dados SQL no Microsoft Fabric
Um projeto de banco de dados SQL é uma representação local de objetos SQL que compõem o esquema para um único banco de dados, 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 em fluxos de trabalho de integração contínua e implantação contínua (CI/CD) conhecidos 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 do banco de dados SQL, você cria cada objeto uma vez. Se 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
. Os 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 fundamentais a esse conjunto de arquivos com seu processo de compilação:
- validação de referências entre objetos e a sintaxe em relação a uma versão específica do SQL
- de implantação do artefato de compilação em bancos de dados novos ou existentes
A funcionalidade para projetos de banco de dados SQL é fornecida pela biblioteca Microsoft.SqlServer.DacFx .NET e é apresentada em várias ferramentas de parade desenvolvimento SQL. O DacFx tem vários pontos de extensibilidade, como a 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 está Microsoft.Build.Sql, atualmente disponível em visualização e aconselhado para novosde desenvolvimento.
Validação
Quando um projeto SQL é criado, as relações entre 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 compilação para validar que 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 como a plataforma de destino Sql140 (SQL Server 2017).
Para criar um projeto SQL, executamos dotnet build a partir da 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 compilação pode conter erros (falha de compilação) ou avisos. Os avisos de compilação podem incluir invólucros inconsistentes em nomes de objetos e outras práticas recomendadas personalizáveis, mas não falhe na compilação.
A saída de artefato do processo de compilaçã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, .dacpac
, é um artefato poderoso, reutilizável e declarativo. Com este arquivo, podemos usar 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.
Por exemplo, sqlpackage /Action:Publish /SourceFile:yourfile.dacpac /TargetConnectionString:{yourconnectionstring}
.
Novas bases de dados
SqlPackage navega pelas relações de objeto para criar cada objeto na ordem certa ao publicar um dacpac em um novo banco de dados. Por exemplo, SqlPackage cria Table_A antes Table_B quando Table_B tem uma chave estrangeira para Table_A.
Você não quer estar executando uma pasta inteira de scripts SQL, especialmente quando você poderia estar usando projetos SQL que executa automaticamente cada seção T-SQL na ordem certa com base em relações de objeto.
Bases 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 banco .dacpac
de dados de origem e um banco de dados de destino antes de determinar quais etapas ele precisa executar para atualizar esse banco de dados. Por exemplo, se Table_C estiver faltando duas colunas no banco de dados que ele tem no projeto SQL e StoredProcedure_A foi alterado, SqlPackage cria uma instrução ALTER TABLE
e uma instrução ALTER PROCEDURE
em vez de tentar cegamente criar um monte de objetos.
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 utilizar
Os projetos de banco de dados SQL são uma ótima opção para equipes que procuram integrar o desenvolvimento de banco de dados em um fluxo de trabalho de CI/CD. A natureza declarativa dos projetos SQL permite uma única fonte de verdade para o esquema de banco de dados, e o processo de compilação 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 rastrear a origem da verdade para o estado do banco de dados, incluindo o desenvolvimento com um mapeador objeto-relacional (ORM), 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.
Os projetos de banco de dados SQL dão suporte à família de bancos de dados SQL Server e Azure SQL, incluindo o Banco de Dados SQL do Azure e o Azure Synapse Analytics. Quer esteja a desenvolver uma aplicação ou um armazém de dados, os projetos da base de dados SQL podem ser utilizados para gerir o esquema da sua base de dados. Os projetos SQL podem ser desenvolvidos a partir de ferramentas no Visual Studio, VS Code e Azure Data Studio.
Projetos originais vs projetos no estilo SDK (visualização)
O formato de projeto SQL original é 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 Projetos do Banco de Dados SQL para o Azure Data Studio e o 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 será suportado no futuro. O formato de projeto no estilo SDK é mais flexível e contém novos recursos não disponíveis com os projetos SQL originais:
- Suporte a .NET 8 (multiplataforma)
- Referências de pacote do 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 dos projetos SQL originais e os projetos SQL existentes podem ser convertidos em projetos no estilo SDK por meio de modificação do arquivo de projeto.
A exceção à cobertura de funcionalidade é o suporte para objetos SQLCLR, que exigem o .NET Framework. Um projeto que contém objetos SQLCLR pode ser convertido em um projeto de estilo SDK, mas o projeto requer .NET Framework e deve ser criado no Visual Studio no Windows. Depois de ser construído o projeto com o objeto SQLCLR, o .dacpac
pode ser implementado usando o SqlPackage no .NET e no .NET Framework e pode ser usado como uma referência de .dacpac
em um projeto (mesma base de dados ou servidor diferente).
Conteúdo relacionado
- Project-Oriented Desenvolvimento de Banco de Dados Offline
- Extensão de Projetos de Banco de Dados SQL
- SqlPackage
- Exemplos de pipelines CI/CD para projetos SQL
- sql-action do GitHub
- implantações do Azure DevOps SQL
- Aplicativos da camada de dados (DAC)
- repositório de feedback DacFx
- Introdução aos projetos de banco de dados SQL
- Tutorial: Criar e implantar um projeto SQL