sql >> Database >  >> RDS >> Sqlserver

Verversen van metadata over gebruikersfuncties t-SQL

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
                )


  1. SQL-weergave bewerkbaar maken

  2. Verschil tussen sql-instructies en clausule

  3. voorbereidStatement SQL-fout

  4. mysql regex inverse (alleen voor gebruik door REGEXP)