gbns Antwort ist am besten - aber wenn Sie SCHEMABINDING haben, hindert Sie dies oft daran, zugrunde liegende Änderungen vorzunehmen, ohne zuerst SCHEMABINDING zu entfernen und es dann zu ersetzen, wenn Sie das Modul neu erstellen. Sie können SCHEMABINDING nicht verwenden, wenn Ihr Objekt auf Objekte außerhalb der Datenbank verweist.
Wenn diese Schwierigkeit so groß ist, dass Sie SCHEMABINDING nicht verwenden möchten oder können, verwenden Sie sp_refreshsqlmodule in einer Art regulärem Prozess, den Sie ausführen, um Ihre SQL-Module auf Fehler zu überprüfen, bevor sie tatsächlich verwendet werden (er kann auf jeder nicht schemagebundenen Ansicht, UDF, gespeicherten Prozedur usw. ausgeführt werden), ist Ihr Freund.
Sie können beide Techniken zusammen verwenden – Sie können sp_refreshsqlmodule nicht gegen schemagebundene Objekte ausführen (und es besteht auch keine Notwendigkeit).
Sie können es beispielsweise nur auf diesen Modulen ausführen:
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
)