Pertanyaan ini telah ditanyakan beberapa kali di SO, tetapi yang menarik tampaknya tidak ada konsensus tentang jawaban terbaik. Jadi, inilah ringkasan opsi utama yang disarankan berbagai orang (tanpa urutan khusus):
- Masukkan ke database master dengan
sp_
awalan sehingga SQL Server mencarinya di sana terlebih dahulu - Masukkan ke database model, sehingga otomatis ditambahkan ke semua DB baru
- Buat database hanya untuk prosedur 'global' (dan objek lainnya) dan panggil mereka menggunakan penamaan tiga bagian
- Sebagai 3, tetapi buat sinonim di database lain sehingga Anda tidak memerlukan penamaan tiga bagian
- Gunakan alat komersial atau yang dikembangkan sendiri untuk mengelola penerapan ke banyak basis data
- Sebagai 5, tetapi terapkan ke satu database, lalu
diff
database dan terapkan skrip diff untuk diterapkan ke database lain
Menurut pendapat saya, 1 adalah non-starter karena Microsoft secara eksplisit mengatakan Anda tidak boleh membuat objek di database master. 2 terdengar bagus, tetapi dalam praktiknya, database dipulihkan atau disalin lebih sering daripada dibuat dari awal (YMMV), jadi menggunakan model tidak dapat diandalkan.
3 dan 4 bagus untuk tabel dan tampilan, tetapi konteks eksekusi dapat menjadi masalah untuk prosedur dan fungsi tersimpan. Tapi ini tergantung pada logika dalam prosedur dan mungkin bisa diterapkan dalam kasus Anda.
Tetapi 1-4 semua memiliki potensi masalah bahwa jika Anda hanya memiliki satu objek, Anda hanya memiliki satu versi objek itu, dan seringkali berguna untuk memiliki versi berbeda yang tersedia di DB yang berbeda, untuk pengujian atau hanya untuk pelanggan yang berbeda.
5 dan 6 adalah variasi pada tema yang sama dan saya pribadi menemukan ini adalah pendekatan terbaik karena penyebaran adalah masalah yang harus Anda selesaikan, jadi Anda sebaiknya melakukannya dan memastikan bahwa Anda memiliki pengetahuan, alat, dan proses di tempat untuk dapat menerapkan kode dengan rapi dan cepat ke database mana pun dengan cara yang terkontrol dan otomatis.