Bagikan melalui


Membandingkan database dan proyek

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceDatabase SQL di Microsoft Fabric

Memahami perbedaan definisi objek antara database dan proyek SQL dapat memberikan wawasan berharga tentang status database dan proyek Anda, termasuk selama pemecahan masalah pengembangan atau regresi yang sedang berlangsung. Proyek SQL termasuk alat untuk memvisualisasikan perbedaan, menganalisis perubahan yang diperlukan untuk memperbarui database, mengimpor perubahan dari database ke dalam kumpulan file proyek SQL, dan meninjau skrip T-SQL yang akan dijalankan untuk memperbarui database agar sesuai dengan proyek.

Artikel ini meninjau metode untuk membandingkan database dan proyek SQL menggunakan pendekatan yang berbeda:

  • Anda dapat menggunakan skema dibandingkan untuk memvisualisasikanperbedaan antara database dan/atau proyek. Perbandingan ini dapat membantu Anda mengidentifikasi perubahan yang perlu disinkronkan antara database dan proyek.
  • Anda dapat menggunakan laporan penyebaran untuk meringkas dan mengotomatiskan tinjauan perubahan yang diperlukan untuk memperbarui database.
  • Anda dapat menggunakan perbandingan skema atau ekstrak SqlPackage untuk mengimpor perubahan dari database ke dalam kumpulan file proyek SQL.
  • Anda dapat menggunakan SqlPackage skrip penerapan atau pembanding skema untuk meninjau perintah T-SQL yang dijalankan untuk memperbarui database agar sesuai dengan proyek.

Perbandingan skema: memvisualisasikan perbedaan

Prerequisites

Perbandingan skema grafis belum tersedia dalam pratinjau proyek SQL bergaya SDK di Visual Studio. Gunakan Azure Data Studio atau Visual Studio untuk membandingkan skema.

Perbandingan skema memerlukan alat grafis seperti Visual Studio, atau ekstensi MSSQL untuk Visual Studio Code.

Summary

Perbandingan skema menyediakan antarmuka terkaya secara visual untuk memahami perbedaan antara database dan proyek. Kemampuan utama dengan perbandingan skema adalah bahwa arah perbandingan dapat dibalik. Akibatnya, Anda dapat menggunakan perbandingan skema untuk memahami perubahan dari proyek yang akan disebarkan ke database atau perubahan dari database untuk ditambahkan ke proyek. Anda dapat menggunakan skema dibandingkan untuk mengidentifikasi perbedaan definisi objek, seperti tabel, tampilan, prosedur tersimpan, dan fungsi.

Kumpulan perbedaan lengkap atau subset yang dipilih dapat digunakan untuk menerapkan perubahan pada database atau proyek. Perbandingan skema juga dapat menghasilkan skrip penyebaran yang, saat dijalankan, secara efektif menerapkan perubahan pada database.

Pelajari selengkapnya tentang perbandingan skema dalam gambaran umum perbandingan skema.

Menyebarkan laporan: meninjau perubahan

Menyebarkan laporan memerlukan SqlPackage CLI.

dotnet tool install -g Microsoft.SqlPackage

Summary

Laporan penyebaran menyediakan ringkasan perubahan yang diperlukan untuk memperbarui database agar sesuai dengan proyek. SqlPackage CLI menghasilkan laporan penyebaran dengan membandingkan model sumber (.dacpac artefak atau database build proyek SQL) dengan database target. Misalnya, perintah berikut menghasilkan laporan penyebaran untuk database bernama MyDatabase dari proyek SQL bernama MyProject:

dotnet build MyProject.sqlproj
sqlpackage /Action:deployreport /SourceFile:bin/Debug/MyProject.dacpac /TargetConnectionString:{connection string for MyDatabase} /OutputPath:deployreport.xml

XML yang diproduksi adalah bentuk rencana penyebaran yang disederhanakan, meringkas operasi yang akan dilakukan jika penyebaran database dijalankan. Daftar operasi berikut ini tidak lengkap:

  • Create
  • Alter
  • Drop
  • Refresh
  • UnbindSchemaBinding
  • UnbindFulltextIndex
  • TableDataMotion
  • SPRename
  • EnableChangeTrackingDatabase
  • DisableChangeTrackingDatabase

Laporan penyebaran dapat ditinjau di editor teks atau di Visual Studio dan akan terlihat mirip dengan yang berikut ini:

<?xml version="1.0" encoding="utf-8"?>
<DeploymentReport xmlns="http://schemas.microsoft.com/sqlserver/dac/DeployReport/2012/02">
    <Alerts />
    <Operations>
        <Operation Name="Create">
            <Item Value="[CO].[Products].[IX_Products_CategorySlug]" Type="SqlIndex" />
        </Operation>
        <Operation Name="Alter">
            <Item Value="[CO].[Brands]" Type="SqlTable" />
            <Item Value="[CO].[AddProductImage]" Type="SqlProcedure" />
        </Operation>
        <Operation Name="Refresh">
            <Item Value="[CO].[SelectStarView]" Type="SqlView" />
        </Operation>
    </Operations>
</DeploymentReport>

Laporan penyebaran dapat digunakan untuk meninjau perubahan serta memantau peristiwa yang berpotensi berdampak tinggi, seperti gerakan data atau pembuatan/penurunan indeks berkluster. Peristiwa ini akan tercantum dalam laporan penyebaran di bawah elemen Alerts.

Keuntungan dari operasi XML laporan penyebaran adalah dapat digunakan untuk mengotomatiskan tinjauan perubahan yang diperlukan untuk memperbarui database. XML dapat diuraikan dan digunakan untuk menghasilkan laporan atau untuk memicu pemberitahuan berdasarkan operasi atau nama objek yang tercantum.

Mengimpor perubahan dari database

Seperti disebutkan di bagian perbandingan skema, perbandingan skema dapat digunakan untuk menerapkan perubahan dari database ke dalam kumpulan file proyek SQL. Menerapkan perubahan pada proyek SQL adalah skenario umum ketika Anda memiliki database yang secara aktif dikembangkan secara langsung dan proyek SQL digunakan untuk mengelola objek database dalam kontrol sumber. Menyelesaikan operasi ini secara manual melalui Visual Studio atau Azure Data Studio dapat memakan waktu, terutama ketika database memiliki banyak objek atau perubahan sporadis. Di bagian ini, kami meninjau cara mengotomatiskan ekstrak definisi objek dari database ke dalam kumpulan file proyek SQL.

Prerequisites

Dengan fokus pada otomatisasi, kami menggunakan SqlPackage CLI untuk mengekstrak definisi objek dari database ke dalam kumpulan file proyek SQL. Templat .NET Microsoft.Build.Sql.Templates digunakan untuk membuat file proyek SQL, langkah opsional.

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

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

Summary

Perintah ekstrak SqlPackage mengambil database sumber dan menghasilkan model database output, baik sebagai .dacpac file atau sebagai sekumpulan skrip SQL. SqlPackage default untuk menghasilkan .dacpac file, tetapi /p:ExtractTarget= properti dapat digunakan untuk menentukan sekumpulan skrip SQL. Perintah berikut mengekstrak database MyDatabase ke dalam file proyek SQL yang diatur dalam folder MyDatabaseProject:

sqlpackage /Action:Extract /SourceConnectionString:{connection string for MyDatabase} /TargetFile:MyDatabaseProject /p:ExtractTarget=SchemaObjectType

Ketika folder berada di bawah kontrol sumber, definisi objek yang diekstrak akan menunjukkan perbedaan dalam alat kontrol sumber. Dengan menggunakan SqlPackage untuk menghasilkan file dan memeriksa perbedaan kontrol sumber, Anda dapat mengotomatiskan proses impor perubahan dari database ke dalam kumpulan file proyek SQL.

Dalam serangkaian tiga perintah, kita dapat menghapus kumpulan file sebelumnya, mengekstrak database, dan memeriksa perbedaan dalam alat kontrol sumber:

rm -rf MyDatabaseProject
sqlpackage /Action:Extract /SourceConnectionString:{connection string for MyDatabase} /TargetFile:MyDatabaseProject /p:ExtractTarget=SchemaObjectType
git status --porcelain | wc -l

Output kami adalah jumlah file yang diubah oleh ekstrak SqlPackage terbaru. Output perintah git status dapat digunakan untuk memicu langkah otomatisasi lainnya. Jika kita ingin menggunakan set file ini sebagai proyek SQL, kita dapat menggunakan templat .NET Microsoft.Build.Sql.Templates untuk membuat file proyek SQL di folder MyDatabaseProject:

dotnet new sqlproj -n MyDatabaseProject -o MyDatabaseProject

Meninjau skrip T-SQL penerapan

Seperti disebutkan di bagian perbandingan skema, perbandingan skema dapat digunakan untuk menghasilkan skrip T-SQL yang diperlukan untuk memperbarui database agar sesuai dengan proyek SQL. Di bagian ini, kami meninjau cara menggunakan SqlPackage mengotomatiskan pembuatan skrip T-SQL yang diperlukan untuk memperbarui database agar sesuai dengan proyek SQL sehingga dapat disimpan sebagai artefak alur untuk ditinjau dan disetujui.

Prerequisites

dotnet tool install -g Microsoft.SqlPackage

Summary

Menjalankan penyebaran proyek SQL dengan SqlPackage menggunakan tindakan terbitkan , tetapi jika kita ingin meninjau skrip T-SQL yang dijalankan, kita dapat menggunakan tindakan skrip . Perintah berikut menghasilkan skrip T-SQL yang diperlukan untuk memperbarui database bernama MyDatabase agar sesuai dengan proyek SQL bernama MyProject:

dotnet build MyProject.sqlproj
sqlpackage /Action:Script /SourceFile:bin/Debug/MyProject.dacpac /TargetConnectionString:{connection string for MyDatabase} /DeployScriptPath:Deployment.sql