ответ 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
)