Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Logika bersyarat dalam skrip PostDeployment.sql menggunakan SQLCMD

PERBARUI

Saya sekarang menemukan bahwa sintaks if/else di atas tidak berfungsi untuk saya karena beberapa skrip tertaut saya memerlukan pernyataan GO. Pada dasarnya :r hanya mengimpor skrip sebaris, jadi ini menjadi sytax yang tidak valid.

Jika Anda memerlukan pernyataan GO dalam skrip yang ditautkan (seperti yang saya lakukan) maka tidak ada cara mudah untuk mengatasi ini, saya akhirnya membuat beberapa skrip penyebaran posting dan kemudian mengubah proyek saya untuk menimpa skrip penyebaran posting utama pada waktu pembuatan tergantung pada konfigurasi build. Ini sekarang melakukan apa yang saya butuhkan, tetapi sepertinya harus ada cara yang lebih mudah!

Untuk siapa saja yang membutuhkan hal yang sama - Saya menemukan posting ini berguna

Jadi dalam proyek saya, saya memiliki file penyebaran posting berikut:

  • Script.PostDeployment.sql (file kosong yang akan diganti)
  • Default.Script.PostDeployment.sql (tautan ke skrip yang diperlukan untuk konfigurasi data standar)
  • Configuration1.Script.PostDeployment.sql (tautan ke skrip yang diperlukan untuk konfigurasi data tertentu)

Saya kemudian menambahkan yang berikut ke akhir file proyek (klik kanan untuk membongkar dan kemudian klik kanan edit):

  <Target Name="BeforeBuild">
      <Message Text="Copy files task running for configuration: $(Configuration)" Importance="high" />
      <Copy Condition=" '$(Configuration)' == 'Release' " SourceFiles="Scripts\Post-Deployment\Default.Script.PostDeployment.sql" DestinationFiles="Scripts\Post-Deployment\Script.PostDeployment.sql" OverwriteReadOnlyFiles="true" />
      <Copy Condition=" '$(Configuration)' == 'Debug' " SourceFiles="Scripts\Post-Deployment\Default.Script.PostDeployment.sql" DestinationFiles="Scripts\Post-Deployment\Script.PostDeployment.sql" OverwriteReadOnlyFiles="true" />
      <Copy Condition=" '$(Configuration)' == 'Configuration1' " SourceFiles="Scripts\Post-Deployment\Configuration1.Script.PostDeployment.sql" DestinationFiles="Scripts\Post-Deployment\Script.PostDeployment.sql" OverwriteReadOnlyFiles="true" />
  </Target>

Terakhir, Anda perlu menyiapkan konfigurasi build yang cocok dalam solusi.

Juga, bagi siapa pun yang mencoba pekerjaan lain, saya juga mencoba yang berikut ini tanpa hasil:

  1. Membuat acara pembangunan pos untuk menyalin file alih-alih harus meretas file proyek XML. saya tidak dapat menjalankan ini karena saya tidak dapat membentuk jalur yang benar ke file skrip penyebaran pos. Masalah koneksi ini menjelaskan masalahnya

  2. Menggunakan variabel untuk jalur skrip untuk diteruskan ke perintah :r. Tetapi saya menemukan beberapa kesalahan dengan pendekatan ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pos Pemeriksaan Basis Data di SQL Server

  2. Log SQL Server 2008 tidak akan terpotong

  3. Bagaimana cara membuat dan mengisi tabel dalam satu langkah sebagai bagian dari operasi impor CSV?

  4. Kelola Konkurensi Transaksi Menggunakan Kunci di SQL Server

  5. SQL Server 2008 GEOGRAFI STDistance() nilai