odpowiedź gbn jest najlepsze - ale jeśli masz SCHEMABINDING, często uniemożliwia to wprowadzanie podstawowych zmian bez uprzedniego usunięcia SCHEMABINDING, a następnie zastąpienia go podczas ponownego tworzenia modułu. Nie możesz użyć SCHEMABINDING, jeśli twój obiekt odwołuje się do obiektów spoza bazy danych.
Jeśli ta trudność jest tak duża, że nie chcesz lub nie możesz korzystać z PODŁĄCZANIA SCHEMATÓW, użyj sp_refreshsqlmodule w jakimś zwykłym procesie, który uruchamiasz w celu sprawdzenia modułów SQL pod kątem błędów, zanim zostaną one faktycznie użyte (można go uruchomić na dowolnym widoku nieschemabound, UDF, przechowywanym procencie itp.) jest twoim przyjacielem.
Możesz używać obu technik jednocześnie — nie można (i nie ma takiej potrzeby) uruchamiać modułu sp_refreshsqlmodule względem obiektów powiązanych ze schematem.
np. możesz go uruchomić tylko na tych modułach:
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
)