Tutorial: Armazene o esquema da base de dados no Git

Aplica-se a: SQL ServerBase de Dados SQL do AzureAzure SQL Managed Instancebase de dados SQL em Microsoft Fabric

Armazenar o esquema da base de dados no Git oferece vários benefícios, incluindo controlo de versões, colaboração e a capacidade de acompanhar alterações ao longo do tempo. Esta abordagem é particularmente útil para desenvolvimento code-first, onde se define o esquema da base de dados através do código e se aplicam alterações diretamente a um ambiente de desenvolvimento usando um ORM ou agente de programação como o GitHub Copilot.

Neste tutorial, aprendes a armazenar o esquema da base de dados no Git e a geri-lo como parte do teu fluxo de trabalho de desenvolvimento.

  • Criar um novo projeto SQL a partir de uma base de dados existente
  • Commit e envie o código da base de dados para um repositório remoto Git
  • Aplicar alterações da base de dados ao código existente
  • Extrair alterações do repositório remoto Git e aplicá-las à base de dados local (opcional)

Diagrama que demonstra o fluxo tutorial de informação.

Quando terminar, está pronto para acompanhar a sua base de dados no controlo de versões e colaborar com a sua equipa nas alterações da base de dados através de um repositório Git.

Note

Para completar o tutorial, precisas de acesso a uma base de dados SQL. Pode desenvolver localmente de forma gratuita ao utilizar a edição Developer do SQL Server no Windows ou em containers.

Pré-requisitos

Warning

Este tutorial não está disponível para os projetos ao estilo SDK (pré-visualização) no Visual Studio 2022. Use o SQL Server Management Studio (SSMS) ou o Visual Studio Code em vez disso.

# install SqlPackage CLI
dotnet tool install -g Microsoft.SqlPackage

# install Microsoft.Build.Sql.Templates
dotnet new install Microsoft.Build.Sql.Templates

Etapa 1: Criar um novo projeto SQL a partir de um banco de dados existente

Para representar a sua base de dados no controlo de versão, use o formato de projeto de base de dados SQL . O projeto inclui .sql ficheiros para cada objeto da base de dados e um .sqlproj com as definições da base de dados. Quando visualiza o projeto no explorador de ficheiros e no controlo de versões, a estrutura de um projeto SQL espelha a navegação na base de dados no explorador de objetos.

A partir do SQL Server Object Explorer no Visual Studio, clique com o botão direito na base de dados a partir da qual quer criar um project e selecione Criar Nova Project... .

Captura de ecrã do diálogo Importar Base de Dados em Visual Studio.

No diálogo Criar Novo Projeto, insira um nome de projeto. O nome do projeto não precisa de corresponder a um nome de base de dados. Verifique e modifique o local do projeto conforme necessário. As configurações de importação padrão importam os objetos para pastas por esquema e, em seguida, tipo de objeto. Você pode modificar as configurações de importação para alterar a estrutura de pastas ou para incluir permissões nos objetos que estão sendo importados. Inicie a importação.

O diálogo Importar Base de Dados mostra o progresso da importação como mensagens. Quando a importação termina, pode ver os objetos importados no Explorador de Soluções. O processo armazena os registos num ficheiro no diretório do projeto sob Import Schema Logs. Selecione Concluir.

Warning

Este tutorial não está disponível para os projetos ao estilo SDK (pré-visualização) no Visual Studio 2022. Use o SQL Server Management Studio (SSMS) ou o Visual Studio Code em vez disso.

Na vista do explorador de objetos da base de dados no Visual Studio Code, selecione uma base de dados a partir da qual quer criar um projeto. Clique com o botão direito do mouse no banco de dados e selecione Criar projeto a partir do banco de dados.

Captura de ecrã do projeto Create a partir do diálogo da base de dados no Visual Studio Code.

Em Visual Studio Code, o diálogo Criar projeto a partir da base de dados requer o nome e localização do projeto. As configurações de importação padrão importam os objetos para pastas por esquema e, em seguida, tipo de objeto. Pode selecionar uma estrutura de pastas diferente ou escolher incluir permissões nos objetos importados antes de selecionar Criar.

Abra a exibição Projetos de Banco de Dados para ver o novo projeto e as definições de objeto importadas.

A partir do Object Explorer no SQL Server Management Studio, clique com o botão direito na base de dados de onde quer criar um project e selecione Create Project from Database... no menu Tasks.

Captura de ecrã do Novo Projeto SQL da caixa de diálogo Base de Dados no SQL Server Management Studio.

No diálogo Create SQL Project from Database, verifique a base de dados selecionada e modifique o nome e a localização do project conforme necessário. O novo projeto é criado com os objetos da base de dados selecionada e organizado em pastas por esquema e depois por tipo de objeto.

Um ficheiro de solução é criado automaticamente na pasta acima da pasta do projeto e abre-se no Explorador de Soluções após a criação. Se quiser adicionar o seu novo projeto a uma solução existente, selecione Adicionar à solução e navegue até ao ficheiro da solução. Selecione Criar para criar o projeto.

Use a CLI SqlPackage para extrair o esquema de uma base de dados existente para um projeto SQL. O seguinte comando SqlPackage extrai o esquema de uma base de dados para um projeto SQL completo. Os .sql ficheiros são organizados por pastas aninhadas de esquema e tipo de objeto, e é criado um .sqlproj ficheiro para gerir o projeto com o conjunto de propriedades correspondente às opções da base de dados.

sqlpackage /a:Extract /ssn:localhost /sdn:MyDatabase /tf:MyDatabaseProject /p:ExtractTarget=SqlProject

Passo 2: Comprometer e enviar o código da base de dados para um repositório remoto Git

Depois de criar o projeto SQL, inicie a linha temporal Git da base de dados num repositório Git local.

Com o projeto SQL aberto no Visual Studio, cria um repositório Git local e envia-o para um remoto.

  1. Selecione Git>Criar Repositório Git na barra de menus.

  2. No diálogo Criar um Repositório Git, na secção Enviar para um novo remoto, escolha GitHub ou Azure DevOps. Se optar por fazer push para o GitHub, inicie sessão na sua conta do GitHub quando for solicitado. Se escolher Azure DevOps, inicie sessão na sua conta Azure DevOps e selecione ou crie um projeto.

  3. Introduza o nome e a descrição do repositório. Garante que o modelo .gitignore está definido para VisualStudio e seleciona Criar e Empurrar.

O Visual Studio cria o repositório Git local, faz um commit inicial com os ficheiros SQL do projeto e envia-os para o remoto.

Para verificar se o código foi enviado com sucesso, abra um navegador e navegue até ao seu repositório no GitHub (https://github.com) ou no Azure DevOps (https://dev.azure.com). Deves ver os ficheiros do projeto SQL, incluindo o .sqlproj ficheiro e as definições dos .sql objetos.

Para mais informações, consulte Sobre o Git no Visual Studio.

Warning

Este tutorial não está disponível para os projetos ao estilo SDK (pré-visualização) no Visual Studio 2022. Use o SQL Server Management Studio (SSMS) ou o Visual Studio Code em vez disso.

Com a pasta do projeto SQL aberta no Visual Studio Code, inicialize um repositório Git local e envie-o para um remoto.

  1. Abra a vista de Controlo de Versões selecionando o ícone de Controlo de Versões na Barra de Atividade, ou pressione Ctrl+Shift+G.

  2. Selecione Inicializar Repositório para criar um novo repositório Git na pasta atual.

  3. Todos os ficheiros do projeto aparecem como alterações não rastreadas. Selecione o ícone + junto a Alterações para preparar todos os ficheiros.

  4. Introduza uma mensagem de commit, como Initial commit of SQL project na caixa de entrada da mensagem, e selecione o botão Commit (ícone de verificação).

  5. Selecione Publicar Ramificação na vista Controlo de Versões para enviar o seu repositório local para um repositório remoto. Escolha se deve publicar no GitHub ou no Azure DevOps e siga as instruções de iniciação de sessão. Selecione uma visibilidade de repositório (pública ou privada) e confirme.

Para verificar se o código foi enviado com sucesso, abra um navegador e navegue até ao seu repositório no GitHub (https://github.com) ou no Azure DevOps (https://dev.azure.com). Deves ver os ficheiros do projeto SQL, incluindo o .sqlproj ficheiro e as definições dos .sql objetos.

Para mais informações, consulte Controlo de Versão em Visual Studio Code.

Com o projeto SQL aberto no SQL Server Management Studio, cria um repositório Git local e envia-o para um remoto.

  1. Selecione Git>Criar Repositório Git na barra de menus.

  2. No diálogo Criar um Repositório Git, na secção Enviar para um novo remoto, escolha GitHub ou Azure DevOps. Se optar por fazer push para o GitHub, inicie sessão na sua conta do GitHub quando for solicitado. Se escolher Azure DevOps, inicie sessão na sua conta Azure DevOps e selecione ou crie um projeto.

  3. Introduza o nome e a descrição do repositório. Garante que o modelo .gitignore está definido para VisualStudio e seleciona Criar e Empurrar.

O SSMS cria o repositório Git local, faz um commit inicial com os ficheiros do teu projeto SQL e envia-o para o remoto.

Para verificar se o código foi enviado com sucesso, abra um navegador e navegue até ao seu repositório no GitHub (https://github.com) ou no Azure DevOps (https://dev.azure.com). Deves ver os ficheiros do projeto SQL, incluindo o .sqlproj ficheiro e as definições dos .sql objetos.

Para mais informações, consulte Sobre o Git no Visual Studio.

No diretório do projeto SQL, inicialize um repositório Git local, faça commit de todos os ficheiros e envie-os para um repositório remoto.

  1. Inicialize um novo repositório Git, adicione um .gitignore ficheiro e faça um commit inicial:

    cd MyDatabaseProject
    git init
    dotnet new gitignore
    git add .
    git commit -m "Initial commit of SQL project"
    
  2. Crie um novo repositório remoto no GitHub ou Azure DevOps:

    • GitHub: Vá a https://github.com/new e crie um novo repositório. Não o inicialize com um ficheiro README, .gitignore ou uma licença.
    • Azure DevOps: Vá ao seu projeto Azure DevOps, selecione Repos e crie um novo repositório. Desmarque Adicionar um README.
  3. Adicione o repositório remoto e envie o seu primeiro commit:

    git remote add origin <your-repository-url>
    git push -u origin main
    

    Substitua <your-repository-url> pelo URL fornecido pelo GitHub ou Azure DevOps quando criou o repositório.

Para verificar se o código foi enviado com sucesso, abra um navegador e vá ao seu repositório. Deves ver os ficheiros do projeto SQL, incluindo o .sqlproj ficheiro e as definições dos .sql objetos.

Passo 3: Aplicar alterações da base de dados ao código existente

Quando o esquema da base de dados muda fora do projeto SQL (por exemplo, através de modificações diretas numa base de dados, uma migração ORM ou ações agentes), pode atualizar o projeto para refletir essas alterações.

Use o Schema Compare para atualizar o projeto SQL a partir da base de dados.

  1. No SQL Server Object Explorer, clique com o botão direito na base de dados e selecione Comparar Esquema.

  2. Na janela de Comparação de Esquemas , a base de dados está definida como fonte. Selecione a lista pendente Selecionar destino e escolha Selecionar destino.

  3. No diálogo Selecionar Esquema de Alvo, selecione Project e escolha o seu project de base de dados SQL. Selecione OK.

  4. Selecione Comparar para executar a comparação. Os resultados mostram as diferenças entre a base de dados (fonte) e o projeto (alvo).

  5. Reveja as diferenças. Desmarque quaisquer alterações que não queira aplicar ao projeto.

  6. Selecione Atualizar para aplicar as alterações selecionadas ao projeto SQL.

Os ficheiros do projeto são atualizados para corresponder ao esquema da base de dados. Revise as alterações na janela de Alterações do Git , introduza uma mensagem de commit e selecione Commit Tudo. Selecione Push para enviar as alterações ao repositório remoto.

Warning

Este tutorial não está disponível para os projetos ao estilo SDK (pré-visualização) no Visual Studio 2022. Use o SQL Server Management Studio (SSMS) ou o Visual Studio Code em vez disso.

Use o comando Update Project from Database para atualizar o project SQL a partir da base de dados.

  1. No explorador de objetos da base de dados, clique com o botão direito do rato na base de dados e selecione SQL Database Projects>Atualizar Projeto a partir da Base de Dados.

  2. Selecione o projeto de base de dados SQL para atualizar e confirmar.

  3. A comparação é executada e aplica as alterações da base de dados ao projeto. Os ficheiros atualizados .sql aparecem na vista de Controlo de Versões como ficheiros modificados.

Reveja as alterações na vista Controlo de Código-Fonte, prepare os ficheiros modificados, introduza uma mensagem de consolidação e selecione Consolidar. Selecione Sincronizar Alterações para enviar o commit para o repositório remoto.

Use o Schema Compare para atualizar o projeto SQL a partir da base de dados.

  1. No Object Explorer, clique com o botão direito na base de dados e selecione Tasks>Schema Compare (pré-visualização).

  2. Na janela de Comparação de Esquemas , a base de dados está definida como fonte. Selecione o botão de reticências de destino e escolha o seu projeto de base de dados SQL como destino.

  3. Selecione Comparar para executar a comparação. Os resultados mostram as diferenças entre a base de dados (fonte) e o projeto (alvo).

  4. Reveja as diferenças. Desmarque quaisquer alterações que não queira aplicar ao projeto.

  5. Selecione Aplicar para aplicar as alterações selecionadas ao projeto SQL.

Os ficheiros do projeto são atualizados para corresponder ao esquema da base de dados. Reveja as alterações na janela Alterações do Git, introduza uma mensagem para o commit e selecione Confirmar Tudo. Selecione Push para enviar as alterações ao repositório remoto.

Use o SqlPackage para regenerar o projeto SQL a partir da base de dados, substituindo os ficheiros existentes do projeto pelo esquema atual da base de dados. Enquanto as outras ferramentas de projetos SQL fornecem uma interface gráfica, o SqlPackage oferece uma abordagem de linha de comandos para automação que não permite rever as alterações nos ficheiros antes de as aplicar.

  1. Remova os ficheiros de objetos SQL existentes e regenere o projeto:

    rm -rf MyDatabaseProject
    sqlpackage /a:Extract /ssn:localhost /sdn:MyDatabase /tf:MyDatabaseProject /p:ExtractTarget=SqlProject
    
  2. Revê as alterações com o Git e faz o commit:

    cd MyDatabaseProject
    dotnet new gitignore
    git add .
    git status
    git commit -m "Update project from database changes"
    git push
    

Passo 4: (opcional) Extrair alterações do repositório remoto Git e aplicá-las à base de dados local

Quando outros membros da equipa enviam alterações no esquema da base de dados para o repositório remoto, podes puxar essas alterações e implementá-las na tua base de dados local de desenvolvimento.

  1. Selecione Git>Pull na barra de menu para extrair as alterações mais recentes do repositório remoto.

  2. No Explorador de Soluções, clique com o botão direito no nó do projeto da base de dados SQL e selecione Comparar Esquema.

  3. Na janela de Comparação de Esquemas , o projeto está definido como fonte. Selecione a lista pendente Selecionar destino e escolha Selecionar destino.

  4. No diálogo Selecionar Esquema de Alvo , selecione Base de Dados e escolha a sua ligação local à base de dados de desenvolvimento. Selecione OK.

  5. Selecione Comparar para executar a comparação. Os resultados mostram as diferenças entre o projeto (fonte) e a base de dados (alvo).

  6. Reveja as diferenças para verificar se as alterações são esperadas.

  7. Selecione Atualizar para aplicar as alterações à base de dados.

Warning

Este tutorial não está disponível para os projetos ao estilo SDK (pré-visualização) no Visual Studio 2022. Use o SQL Server Management Studio (SSMS) ou o Visual Studio Code em vez disso.

  1. Abra a vista Controlo de Código-Fonte e selecione Pull no menu ... (ou utilize o botão de sincronização na barra de estado) para obter as alterações mais recentes do repositório remoto.

  2. Na vista de Projetos de Base de Dados , clique com o botão direito no projeto de base de dados SQL e selecione Comparar Esquema.

  3. Na janela de Comparação de Esquemas , o projeto está definido como fonte. Selecione o botão de elipses de alvo e escolha a ligação à base de dados de desenvolvimento local como alvo.

  4. Selecione Comparar para executar a comparação. Os resultados mostram as diferenças entre o projeto (fonte) e a base de dados (alvo).

  5. Reveja as diferenças para verificar se as alterações são esperadas.

  6. Selecione Aplicar para aplicar as alterações à base de dados.

  1. Abre um terminal e executa git pull no diretório do projeto para extrair as últimas alterações do repositório remoto.

  2. No Explorador de Soluções, clique com o botão direito no nó do projeto da base de dados SQL e selecione Schema Compare (pré-visualização).

  3. Na janela de Comparação de Esquemas , o projeto está definido como fonte. Selecione o alvo e escolha a ligação à base de dados de desenvolvimento local.

  4. Selecione Comparar para executar a comparação. Os resultados mostram as diferenças entre o projeto (fonte) e a base de dados (alvo).

  5. Reveja as diferenças para verificar se as alterações são esperadas.

  6. Selecione Aplicar para aplicar as alterações à base de dados.

  1. Extrai as últimas alterações do repositório remoto:

    cd MyDatabaseProject
    git pull
    
  2. Compile o projeto para verificar se as alterações são compiladas com êxito:

    dotnet build
    
  3. Implemente as alterações na sua base de dados local de desenvolvimento usando o SqlPackage:

    sqlpackage /a:Publish /sf:bin/Debug/MyDatabaseProject.dacpac /tsn:localhost /tdn:MyDatabase
    

    Substitua MyDatabaseProject.dacpac pelo nome do ficheiro .dacpac de saída e atualize os valores do servidor de destino (/tsn) e da base de dados (/tdn) conforme necessário.