it-swarm.asia

Apakah ada konsep "sertakan file" di SQL Server?

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.

19
Jonathan Allen

Jika Anda menggunakan SQLCMD , Anda dapat menggunakan :r FileName untuk 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.

19

Dalam arti kuno C preprocessors pasti no

  • T-SQL dengan sendirinya tidak memiliki konsep seperti itu
  • sqlcmd dan sqlcmdmode SSMS tidak menangani jalur file relatif
  • sqlcmd dan sqlcmdmode 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 ingin jalur relatif atau kondisional termasuk Anda perlu menggunakan beberapa panggilan bungkus 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.

4
bernd_k

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 tilitas 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 semua yang ada di batch, termasuk file output.

3
Marian

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 memiliki makro yang terlihat seperti skalar UDF dan nyaman digunakan, tetapi berkinerja secepat UDF inline.

2
A-K

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 tambahan: Saya yakin SQLCMD pada akhirnya akan dimasukkan dalam daftar penyusutan dan 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.
2
user507