Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Aktualisieren von Metadaten zu Benutzerfunktionen t-SQL

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
                )