Apakah ada konsep "sertakan file" di SQL Server?


19

Saya memiliki satu set skrip yang perlu dijalankan dalam urutan tertentu. Saya ingin membuat "file utama" yang mencantumkan semua file lain dan urutannya yang benar. Pada dasarnya seperti file sertakan dari C ++ atau ASP / VBScript.

Jawaban:


19

Jika Anda menggunakan SQLCMD , Anda bisa menggunakan :r FileNameuntuk menyertakan file .sql terpisah.

: r Nama File

Parsing pernyataan T-SQL tambahan dan perintah SQLCMD dari file yang ditentukan oleh FileName ke dalam cache pernyataan. FileName dibaca relatif terhadap direktori startup untuk Visual Studio. File dibaca dan dieksekusi setelah terminator batch ditemukan. Anda dapat mengeluarkan banyak perintah: r. File dapat menyertakan perintah SQLCMD, termasuk terminator batch yang didefinisikan dalam Tools, Options. Anda dapat menggunakan: r dalam skrip pra-penempatan atau pasca-penempatan untuk menyertakan skrip lain.


Apakah Anda menggunakan fitur ini sendiri?
bernd_k

Saya sangat menggunakannya dalam proyek Alat Data Server SQL. Ini sangat membantu ketika saya mencoba mengatur sampel data yang berjalan sebagai skrip posting.
Jonathan Allen

4

Dalam arti preprosesor C kuno pasti tidak

  • T-SQL dengan sendirinya tidak memiliki konsep seperti itu
  • sqlcmd dan sqlcmdmode SSMS tidak menangani jalur file relatif
  • sqlcmd dan sqlcmdmode dari SSMS tidak mendukung kondisi bersyarat termasuk

Jika Anda memiliki satu set file dengan path absolut yang diberikan, yang ingin Anda sertakan dalam urutan tanpa syarat, Anda dapat menggunakan alat baris perintah sqlcmd atau menggunakan SSMS dalam sqlcmdmode seperti yang disebutkan oleh @mfredrickson dan @Marian.


Tetapi jika Anda menginginkan jalur relatif atau kondisional, Anda perlu menggunakan beberapa wrapper yang memanggil sqlcmd (atau salah satu dari isql atau osql pendahulunya yang sudah usang).

Saat ini di pekerjaan saya dalam situasi ini, saya sedang meninjau dan memperluas kode lama dan hta. Saya tidak sepenuhnya bahagia, tetapi ini adalah keputusan pragmatis. Ini berfungsi dan pengguna akhir di rumah dengan GUI hta dan tidak ada instalasi perangkat lunak tambahan yang diperlukan.

Untuk desain baru saya akan mulai berpikir tentang menggunakan WPF dan PowerShell untuk membungkus panggilan sqlcmd, tetapi dengan pelanggan kami saat ini saya tidak dapat menganggap kehadiran PowerShell V2.

Bahkan pada masa-masa sebelumnya kami menulis kumpulan cmd sederhana untuk tujuan ini, beberapa darinya masih digunakan.

Saya kira ada alat saat ini, terutama yang menargetkan Alur Kerja, yang mungkin cocok di sini. Saya tidak terbiasa dengan itu.


3

Bersamaan dengan mode SQLCMD di Management Studio, Anda juga dapat menggunakan file batch untuk digunakan sebagai file master untuk mengatur dan memanggil semua file sql Anda dengan menggunakan utilitas SQLCMD .

Mode SQLCMD adalah simulasi penggunaan utilitas di dalam Management Studio, jadi tidak ada perbedaan besar antara mode. Kecuali bahwa kadang-kadang saya lebih suka menjalankan batch (tidak ada lagi pembukaan M Studio ... memuat db yang benar ... dll). Saya lebih suka mengkonfigurasi semuanya dalam batch, termasuk file output.


2

Saya setuju, preprocessor T-SQL sangat dibutuhkan. Saya mengembangkan sendiri di C #, yang menghabiskan waktu satu jam. Selain mengontrol urutan pelaksanaan skrip SQL, ini juga memungkinkan saya untuk memiliki makro yang terlihat seperti skalar UDF dan nyaman digunakan, tetapi berkinerja secepat UDF inline.


+1 - Saya telah melakukan hal semacam itu dengan alat templating pada sejumlah kesempatan. Meskipun sqlcmd memiliki beberapa fasilitas untuk substitusi variabel, saya akan memberikan seseorang yang menerapkan plugin pre-processor makro yang layak untuk SSMS ciuman besar di bagian bawah.
ConcernedOfTunbridgeWells

1
@ AK, maukah kamu menjelaskan lebih jauh tentang ini? Mungkin memposting beberapa kode di github?
craig

2

Saya suka bernd_k jawaban . Bergantung pada bagaimana Anda menamai skrip Anda, seperti memasukkan angka, SQL Server PowerShell (SQLPS) dapat digunakan jika Anda menjalankan SQL Server 2008 atau lebih tinggi. Kemudian bahkan jika Anda menggunakan SQL 2005 Anda bisa menggunakan PowerShell dan SMO untuk 2005.

Catatan: Saya percaya SQLCMD pada akhirnya akan dimasukkan dalam daftar penyusutan dan sedang diganti dengan SQLPS, PowerShell.

Ada beberapa opsi lain juga.

  1. Siapkan setiap skrip sebagai langkah dalam pekerjaan SQL Agent. Anda dapat mengatur urutan eksekusi.
  2. Buat paket SSIS untuk memanggil setiap file. Ini dapat menawarkan sedikit lebih banyak kontrol dan menawarkan sedikit lebih banyak opsi logging. Saya suka metode ini jika hasil dari satu skrip perlu diverifikasi sebelum yang berikutnya dijalankan.

Saya tidak berpikir SQLCMD akan didepresiasi karena sangat penting untuk bagaimana SQL Server Data Tools dan DACPACs bekerja.
Jonathan Allen

@ JonathanAllen Jika Anda kebetulan menemukan dokumentasi saat ini yang menunjukkan mengelola DACPAC menggunakan SQLCMDberi tahu saya, karena sebagian besar yang saya temukan merujuk pada PowerShell . Saya juga tidak melihat referensi di mana sqlcmddigunakan dengan SSDT kecuali mungkin untuk perbandingan skema, tapi saya tidak pernah menggunakan skrip yang dihasilkan.
Shawn Melton

Skrip SSDT adalah skrip sqlcmd. Begitulah cara menangani parameter, baik yang ditentukan pengguna dan hal-hal seperti nama database. Jika Anda ingin menggunakan DACPAC menggunakan SqlPackage.exe, tautan ini menunjukkan cara meneruskan parameter sqlcmd. msdn.microsoft.com/en-us/…
Jonathan Allen
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.