Mengapa: r perintah SQLCMD ditandai sebagai salah dalam Skrip Post Deployment?

17

Saya telah bekerja beberapa kali dengan skrip posting penempatan dan selalu, secara intuitif menggunakan action build "PostDeploy", karena memang begitu. Sekarang untuk pertama kalinya saya mencoba mengikuti instruksi bawaan dari template skrip untuk menggunakan ":r somescript.sql"sintaks.

Segera baris ini ditandai sebagai salah:

"SQL80001 salah sintaks di sebelah ':'"

Saya menemukan saran untuk mengatur PDS untuk Membangun Aksi "tidak ada". Ini tidak membantu, kesalahan tetap. Apa yang kulewatkan di sini?

Magier
sumber
maaf saya kira menjadi lebih jelas "apa tindakan set script untuk yang memiliki": r "di dalamnya?" :)
Ed Elliott

Jawaban:

15

Dengan asumsi bahwa kesalahan terjadi selama proses membangun, dan bahwa Anda tidak memiliki kesalahan sintaksis yang sebenarnya, dan itu adalah sederhana

:r path\to\file.sql

maka kesalahan juga terjadi ketika file yang diimpor tidak ada. Silakan periksa lokasi file. Jika Anda tidak memberikan path absolut, maka path tersebut akan relatif terhadap folder solusi (setidaknya bagi saya itu adalah).

Jika, saat berkembang, Anda ingin melihat kesalahan yang dilaporkan proses pembangunan, kemudian pastikan untuk mengaktifkan "mode SQLCMD" di editor T-SQL di Visual Studio. Ada tombol di paling kanan di bilah tombol dengan tanda "!" di dalamnya yang seharusnya mengaktifkan ini. Atau Anda dapat pergi ke menu SQL , pilih Transact-SQL Editor -> , pilih Execution Settings -> , lalu akhirnya pilih Mode SQLCMD . Sekarang ketika Anda Jalankan skrip, itu akan menafsirkan dengan benar :r, seperti proses build / publish.

Selain itu, Skrip Post Deploy (PDS) Anda perlu memiliki Build Action yang ditetapkan ke PostDeploy . Jika diatur ke Tidak ada maka akan dilewati seluruhnya oleh proses pembuatan SSDT.

Solomon Rutzky
sumber
4

Kesalahan Valid

Ini karena :r somescript.sqlsql tidak valid. Anda melihat kesalahan sintaks, yang persis seperti yang dinyatakan pesan kesalahan.

SQL80001: Sintaks salah dekat ':'.

Mode SQLCMD

Skrip penyebaran pos dijalankan di bawah Mode SQLCMD.

Utilitas sqlcmd memungkinkan Anda memasukkan pernyataan Transact-SQL, prosedur sistem, dan file skrip pada prompt perintah, di Query Editor dalam mode SQLCMD, dalam file skrip Windows atau dalam langkah kerja sistem operasi (Cmd.exe) dari SQL Server Pekerjaan agen. Utilitas ini menggunakan ODBC untuk menjalankan batch Transact-SQL.

Resolusi

Ingatlah bahwa Anda dapat terhubung ke DB dan menjalankan sql dari Visual Studio. Anda akan melihat kesalahan sintaksis yang sama ini jika Anda membuka skrip yang sama dalam SSMS. Namun, di SSMS dan Visual Studio, Anda dapat "mengaktifkan" Mode SQLCMD.

VS 2017

  • klik kanan pada editor yang berisi skrip sql
  • klik Pengaturan Eksekusi
  • klik Mode SQLCMD
  • Perhatikan bahwa Anda dapat melakukan hal yang sama dari menu SQL

SSMS 17, SSMS 18

  • Permintaan (item menu)
  • Mode SQLCMD

Lihat juga

Seth Flowers
sumber