отговорът на gbn е най-добрият - но когато имате 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
)