risposta di gbn è la cosa migliore, ma quando si dispone di SCHEMABINDING, questo spesso impedisce di apportare modifiche sottostanti senza prima rimuovere SCHEMABINDING e quindi sostituirlo durante la ricreazione del modulo. Non puoi usare SCHEMABINDING se il tuo oggetto fa riferimento a oggetti al di fuori del database.
Se questa difficoltà è così grande che non desideri o non puoi utilizzare SCHEMABINDING, quindi utilizzare sp_refreshsqlmodule in una sorta di processo regolare che esegui per verificare la presenza di errori nei moduli SQL prima che vengano effettivamente utilizzati (può essere eseguito su qualsiasi vista non associata a schemi, UDF, stored proc, ecc.) è tuo amico.
È possibile utilizzare entrambe le tecniche insieme:non è possibile (e non è necessario) eseguire sp_refreshsqlmodule su oggetti associati allo schema.
ad esempio, puoi eseguirlo solo su questi moduli:
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
)