Saya harus menulis skrip penerapan yang akan berfungsi jika ada prosedur tersimpan atau tidak ada. yaitu jika ada, maka saya perlu mengubahnya, jika tidak buatlah.
Bagaimana saya bisa melakukan ini di sql.
Saya menggunakan SQL Server 2005
sql
sql-server-2005
stored-procedures
GordyII
sumber
sumber
Jawaban:
Jika Anda MENGHENTIKAN dan MENCIPTAKAN prosedur, Anda akan kehilangan pengaturan keamanan. Ini bisa mengganggu DBA Anda atau menghancurkan aplikasi Anda sama sekali.
Apa yang saya lakukan adalah membuat prosedur tersimpan sepele jika belum ada. Setelah itu, Anda dapat mengubah prosedur tersimpan sesuai dengan keinginan Anda.
Dengan cara ini, pengaturan keamanan, komentar dan meta deta lainnya akan selamat dari penyebaran.
sumber
if object_id('YourSp') is null BEGIN ... END
untuk menambahkan izin yang tepat setelah membuat prosedur tersimpan.Cara terbersih adalah dengan menguji keberadaannya, jatuhkan jika ada, lalu buat ulang. Anda tidak dapat menanamkan pernyataan "buat proc" di dalam pernyataan IF. Ini harus dilakukan dengan baik:
sumber
Jika Anda hanya berurusan dengan prosedur tersimpan, hal yang paling mudah untuk dilakukan adalah mungkin menjatuhkan proc, lalu membuatnya kembali. Anda bisa menghasilkan semua kode untuk melakukan ini menggunakan panduan Menghasilkan Script di SQL Server.
sumber
Dari
SQL Server 2016 CTP3
Anda dapat menggunakan pernyataan DIE baru, bukanIF
pembungkus besarSintaksis:
Pertanyaan:
Info lebih lanjut di sini
sumber
dimana
xxx
nama procsumber
Selain apa yang telah dikatakan, saya juga ingin menambahkan pendekatan yang berbeda dan menganjurkan penggunaan strategi penyebaran skrip diferensial. Alih-alih membuat skrip stateful yang selalu memeriksa keadaan saat ini dan bertindak berdasarkan kondisi itu, gunakan melalui serangkaian skrip stateless yang meningkatkan versi dari versi terkenal . Saya telah menggunakan strategi ini dan itu menghasilkan banyak waktu karena skrip penerapan saya sekarang semuanya 'JIKA' gratis.
sumber
Anda dapat menulis kueri sebagai berikut:
Untuk lebih spesifik pada sintaks di atas:
OBJECT_ID adalah nomor id unik untuk objek dalam database, ini digunakan secara internal oleh SQL Server. Karena kita melewati ProcedureName diikuti oleh Anda objek tipe P yang memberitahu SQL Server bahwa Anda harus menemukan objek yang disebut ProcedureName yang merupakan tipe prosedur yaitu, P
Kueri ini akan menemukan prosedur dan jika tersedia itu akan menjatuhkannya dan membuat yang baru.
Untuk informasi terperinci tentang OBJECT_ID dan jenis Objek, silakan kunjungi: SYS.Objects
sumber
sumber
Saya memiliki proc tersimpan yang memungkinkan pelanggan untuk memperpanjang validasi, jika ada, saya tidak ingin mengubahnya, jika tidak saya ingin membuatnya, cara terbaik yang saya temukan:
sumber
Kode di bawah ini akan memeriksa apakah prosedur yang tersimpan sudah ada atau belum.
Jika ada itu akan berubah, jika tidak ada itu akan membuat prosedur tersimpan baru untuk Anda:
sumber
Pilihan yang lebih baik mungkin menggunakan alat seperti Red-Gate SQL Compare atau SQL Examiner untuk secara otomatis membandingkan perbedaan dan menghasilkan skrip migrasi.
sumber