jawaban gbn yang terbaik - tetapi ketika Anda memiliki SCHEMABINDING, ini sering mencegah Anda membuat perubahan mendasar tanpa terlebih dahulu menghapus SCHEMABINDING dan kemudian menggantinya saat membuat ulang modul. Anda tidak dapat menggunakan SCHEMABINDING jika objek Anda mereferensikan objek di luar database.
Jika kesulitan ini sangat besar sehingga Anda tidak ingin atau tidak dapat menggunakan SCHEMABINDING, gunakan sp_refreshsqlmodule dalam beberapa jenis proses reguler yang Anda jalankan untuk memeriksa kesalahan modul SQL sebelum benar-benar digunakan (dapat dijalankan pada tampilan non-skema, UDF, proc tersimpan, dll.) adalah teman Anda.
Anda dapat menggunakan kedua teknik secara bersamaan - Anda tidak dapat (dan tidak perlu) menjalankan sp_refreshsqlmodule terhadap objek yang terikat skema.
misalnya, Anda hanya dapat menjalankannya di modul berikut:
SELECT *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE (
OBJECTPROPERTY(OBJECT_ID(QUOTENAME(ROUTINE_SCHEMA) + '.' + QUOTENAME(ROUTINE_NAME)), N'IsSchemaBound') IS NULL
OR OBJECTPROPERTY(OBJECT_ID(QUOTENAME(ROUTINE_SCHEMA) + '.' + QUOTENAME(ROUTINE_NAME)),
N'IsSchemaBound') = 0
)