gbn's answer सबसे अच्छा है - लेकिन जब आपके पास SCHEMABINDING होता है, तो यह अक्सर आपको SCHEMABINDING को हटाए बिना और फिर मॉड्यूल को फिर से बनाते समय इसे बदले बिना अंतर्निहित परिवर्तन करने से रोकता है। यदि आपका ऑब्जेक्ट डेटाबेस के बाहर की वस्तुओं का संदर्भ देता है, तो आप SCHEMABINDING का उपयोग नहीं कर सकते।
यदि यह कठिनाई इतनी अधिक है कि आप SCHEMABINDING का उपयोग नहीं करना चाहते हैं या नहीं कर सकते हैं, तो sp_refreshsqlmodule किसी प्रकार की नियमित प्रक्रिया में, जिसे आप वास्तव में उपयोग किए जाने से पहले त्रुटियों के लिए अपने SQL मॉड्यूल की जाँच करने के लिए चलाते हैं (इसे किसी भी गैर-स्कीमाबाउंड दृश्य, UDF, संग्रहीत खरीद, आदि पर चलाया जा सकता है) आपका मित्र है।
आप दोनों तकनीकों का एक साथ उपयोग कर सकते हैं - आप स्कीमाबाउंड ऑब्जेक्ट्स के विरुद्ध sp_refreshsqlmodule नहीं चला सकते (और इसकी कोई आवश्यकता नहीं है)।
उदाहरण के लिए, आप इसे केवल इन मॉड्यूल पर चला सकते हैं:
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
)