gbns svar är bäst - men när du har SCHEMABINDING hindrar detta dig ofta från att göra underliggande ändringar utan att först ta bort SCHEMABINDING och sedan ersätta den när du återskapar modulen. Du kan inte använda SCHEMABINDING om ditt objekt refererar till objekt utanför databasen.
Om denna svårighet är så stor att du inte vill eller kan använda SCHEMABINDING, använd sedan sp_refreshsqlmodule i någon form av vanlig process som du kör för att kontrollera dina SQL-moduler för fel innan de faktiskt används (den kan köras på valfri icke-schemabunden vy, UDF, lagrad proc, etc) är din vän.
Du kan använda båda teknikerna tillsammans - du kan inte (och det finns inget behov av att) köra sp_refreshsqlmodule mot schemabundna objekt.
t.ex. kan du bara köra det på dessa moduler:
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
)