gbns svar er bedst - men når du har SCHEMABINDING, forhindrer dette dig ofte i at lave underliggende ændringer uden først at fjerne SCHEMABINDING og derefter erstatte det, når du genskaber modulet. Du kan ikke bruge SCHEMABINDING, hvis dit objekt refererer til objekter uden for databasen.
Hvis denne vanskelighed er så stor, at du ikke ønsker eller kan bruge SCHEMABINDING, så brug sp_refreshsqlmodule i en form for almindelig proces, som du kører for at tjekke dine SQL-moduler for fejl, før de rent faktisk bruges (det kan køres på enhver ikke-skemabundet visning, UDF, lagret proc, osv.) er din ven.
Du kan bruge begge teknikker sammen - du kan ikke (og der er ingen grund til at) køre sp_refreshsqlmodule mod skemabundne objekter.
f.eks. kan du kun køre det på disse 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
)