gbn's antwoord is het beste - maar als u SCHEMABINDING hebt, voorkomt dit vaak dat u onderliggende wijzigingen aanbrengt zonder eerst SCHEMABINDING te verwijderen en vervolgens te vervangen bij het opnieuw maken van de module. U kunt SCHEMABINDING niet gebruiken als uw object verwijst naar objecten buiten de database.
Als deze moeilijkheid zo groot is dat u SCHEMABINDING niet wilt of kunt gebruiken, gebruik dan sp_refreshsqlmodule in een soort regulier proces dat u uitvoert om uw SQL-modules te controleren op fouten voordat ze daadwerkelijk worden gebruikt (het kan worden uitgevoerd op elke niet-schemagebonden weergave, UDF, opgeslagen proces, enz.) is uw vriend.
U kunt beide technieken samen gebruiken - u kunt (en hoeft ook niet) sp_refreshsqlmodule uitvoeren tegen schemagebonden objecten.
u kunt het bijvoorbeeld alleen op deze modules uitvoeren:
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
)