Tidak termasuk tabel tertentu dari penggunaan SSDT

11

Saya memiliki database yang ada dengan segala sesuatu dalam skema dbo. Saya memiliki proyek SSDT dengan objek yang saya tambahkan dengan skemafoo

Saya punya tabel yang terlihat seperti ini di proyek:

CREATE table foo.a (
    id INT NOT NULL
        CONSTRAINT [PK_foo_a] PRIMARY KEY CLUSTERED
        CONSTRAINT [FK_foo_a] FOREIGN KEY REFERENCES [dbo].[a],
    desc NVARCHAR(50) NOT NULL
)

Itu tergantung pada dbo.a. dbo.a memiliki banyak kolom yang merupakan kunci asing ke kolom lainnya. Orang lain (yang mempertahankan skema default) dapat mengubah dbo.a.

Saya ingin menyimpan dbo.a sebagai:

CREATE table dbo.a (
    id INT NOT NULL
        CONSTRAINT [PK_a] PRIMARY KEY CLUSTERED
)

Jadi itu dibangun secara internal, tetapi tidak dikerahkan. Apakah itu mungkin?

Justin Dearing
sumber
Apakah Anda tidak menggunakan Skema Bandingkan untuk penyebaran Anda? Anda cukup menghapus centang tabel itu dari daftar ketika perubahan terdeteksi.
Dave
Saya melakukan membandingkan skema di saat ini, tetapi tidak dari laptop saya ke server dev saya ingin melakukan penyebaran penerbitan yang sebenarnya.
Justin Dearing

Jawaban:

11

Anda bisa menggunakan AgileSqlClub SqlPackage Deployment Filter .

Instruksi singkat direproduksi dari artikel asli oleh Ed Elliott :

  1. Unduh filter dari agilesqlclub.codeplex.com
  2. Masukkan DLLke dalam folder yang sama dengansqlpackage.exe
  3. Tambahkan parameter baris perintah ini untuk penerapan Anda:

    /p:AdditionalDeploymentContributors=AgileSqlClub.DeploymentFilterContributor /p:AdditionalDeploymentContributorArguments="SqlPackageFilter=IgnoreSchema(BLAH)"

    Ini tidak akan menyebarkan, menjatuhkan atau mengubah apa pun dalam BLAHskema.

Lihat artikel asli untuk detail lengkap.

lucazav
sumber
Ketika saya menyebarkan dari devenv.exe melalui file foo.publish.xml tidak menyebarkan sqlpackage.exe. Apakah ada cara agar saya bisa melakukannya?
Justin Dearing
Apa yang saya lakukan adalah tidak pernah menggunakan devenv untuk menyebarkan perubahan, sebagai gantinya membangun proyek dan menggunakan skrip untuk mendorong sqlpackage.exe - cara ini Anda dapat melakukan hal-hal seperti menggunakan kontributor penyebaran dengan mudah dan juga menguji skrip yang sama yang dapat Anda gunakan di lingkungan Anda yang lain dalam proses ci Anda!
Ed Elliott
Ini adalah bantuan besar bagi saya, saya hanya perlu menggunakan skema tertentu. Catatan untuk orang lain di masa depan, metode ignoreschema dapat menggunakan regex IgnoreSchema (^ (?! \ B (? I) BLAH \ b). *) Untuk mengabaikan semuanya kecuali skema BLAH
andyb952
3

Hanya mengelola bagian dari database dengan SSDTsulit. Jika tidak ada dependensi maka Anda bisa melarangnya untuk menjatuhkan objek dan tidak memasukkannya ke dalam proyek. Karena ada dependensi, tetapi Anda tidak ingin mengelolanya, saya pikir Anda harus mengelabui sistem.

Satu metode muncul di pikiran, saya tidak memiliki kemampuan untuk menguji mereka sekarang dan saya hanya menggunakan metode "mirip" dengan ini, bukan yang ini tepatnya.

Pilihan 1:

  1. Buat proyek database baru dengan dbo.adi dalamnya.

  2. Referensi tabel dengan penamaan 3-bagian. Untuk bagian pertama nama, gunakan variabel SQLCMD. Misalnya[$(DatabaseName)].dbo.a.

  3. Jangan pernah gunakan foobasis data Anda .

  4. Melalui file publikasi atau antarmuka cli, buat $(DatabaseName)nama yang sama dengan database asli Anda.

SQL Hammer
sumber
Akan mencoba ini
Justin Dearing
@JustinDearing Gunakan metode filter penyebaran, ini persis sesuai dengan kasus penggunaan Anda (Yaitu Simpan semua tabel dalam kontrol sumber dan abaikan saja beberapa saat penerapan)
Ed Elliott
0

Cara bawaan "bersih" untuk melakukan ini (mulai 2016) menggunakan file Bandingkan Skema yang disimpan. Kamu bisa:

  1. Lakukan Skema Bandingkan (dari proyek basis data Anda -> server target) dan hapus centang pada objek yang ingin Anda kecualikan untuk memperbarui.
  2. Simpan Skema Anda Bandingkan dengan file * .scmp
  3. Anda dapat menyalin dan menempel file .scmp untuk membuat versi untuk lingkungan yang berbeda jika diperlukan dan cukup mengedit dalam editor XML untuk mengubah sumber (untuk menunjuk untuk membangun file output dacpac), koneksi, dll. Atau bahkan secara manual menambah / memodifikasi item di bagian .
  4. Konfigurasikan penyebaran Anda / publikasikan parameter perintah untuk menggunakan file .scmp yang sesuai untuk publikasi. mis. SqlPackage.exe / Action: publish /SourceFile:c:propro\schema_compare.scmp

Informasi lebih lanjut di sini: https://devblogs.microsoft.com/ssdt/schema-compare-in-sqlpackage-and-the-data-tier-application-framework-dacfx/

Jeremy H
sumber