Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Aggiornamento dei metadati sulle funzioni utente t-SQL

risposta di gbn è la cosa migliore, ma quando si dispone di SCHEMABINDING, questo spesso impedisce di apportare modifiche sottostanti senza prima rimuovere SCHEMABINDING e quindi sostituirlo durante la ricreazione del modulo. Non puoi usare SCHEMABINDING se il tuo oggetto fa riferimento a oggetti al di fuori del database.

Se questa difficoltà è così grande che non desideri o non puoi utilizzare SCHEMABINDING, quindi utilizzare sp_refreshsqlmodule in una sorta di processo regolare che esegui per verificare la presenza di errori nei moduli SQL prima che vengano effettivamente utilizzati (può essere eseguito su qualsiasi vista non associata a schemi, UDF, stored proc, ecc.) è tuo amico.

È possibile utilizzare entrambe le tecniche insieme:non è possibile (e non è necessario) eseguire sp_refreshsqlmodule su oggetti associati allo schema.

ad esempio, puoi eseguirlo solo su questi moduli:

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
                )