Anda dapat membuat prosedur tersimpan yang mereferensikan objek yang belum ada (misalnya tabel dan fungsi). Anda tidak dapat membuat prosedur tersimpan yang mereferensikan kolom yang belum ada di objek yang sudah ada. Ini adalah pedang bermata dua dari resolusi nama yang ditangguhkan - SQL Server memberi Anda keuntungan dari keraguan dalam beberapa kasus, tetapi tidak semua. Lihat ide Erland untuk SET STRICT_CHECKS ON;
mendapatkan beberapa ide tempat ini bekerja dan tempat-tempat yang rusak:
http://www.sommarskog.se/strict_checks.html
(Dan bagaimana dia ingin kebalikan dari apa yang Anda cari - Anda ingin membiarkan apa pun untuk dikompilasi terlepas dari keberadaan, dan dia ingin setiap kolom atau tabel diperiksa.)
Tidak ada pengaturan seperti SET DEFERRED_NAME_RESOLUTION OFF;
meskipun telah diminta:
http://connect.microsoft.com/sql/127152
Dan tidak ada pengaturan seperti IGNORE ALL_RESOLUTION;
.
Anda bisa menyiasatinya dalam beberapa cara, termasuk:
(a) menggunakan SQL dinamis dalam prosedur tersimpan yang terpengaruh.
(B) membangun sebuah rintisan CREATE PROCEDURE
tanpa apa-apa di dalamnya, kemudian jalankan sisa skrip Anda, kemudian jalankan sebuah ALTER PROCEDURE
yang memiliki tubuh asli (pada dasarnya, menyebarkan prosedur dalam dua fase).
(C) membuat alat penyebaran Anda lebih pintar tentang urutan operasi. Jika perubahan tabel membutuhkan kehadiran fungsi, skrip perubahan tersebut yang terakhir. Alat perbandingan skema seperti RedGate's SQL Compare cukup bagus untuk menghasilkan skrip untuk Anda dalam urutan ketergantungan yang tepat. Anda tidak menyebutkan alat apa yang Anda gunakan, tetapi jika tidak melakukan ini ...
(d) Martin Smith memiliki solusi yang menarik di sini , tetapi saya belum memainkannya.