sql >> Base de Datos >  >> RDS >> Sqlserver

Actualización de metadatos en funciones de usuario t-SQL

respuesta de gbn es mejor, pero cuando tiene SCHEMABINDING, esto a menudo le impide realizar cambios subyacentes sin eliminar primero SCHEMABINDING y luego reemplazarlo al volver a crear el módulo. No puede usar SCHEMABINDING si su objeto hace referencia a objetos fuera de la base de datos.

Si esta dificultad es tan grande que no desea o no puede usar SCHEMABINDING, use sp_refreshsqlmodule en algún tipo de proceso regular que ejecuta para verificar si hay errores en sus módulos SQL antes de que realmente se usen (se puede ejecutar en cualquier vista no vinculada al esquema, UDF, proceso almacenado, etc.) es su amigo.

Puede usar ambas técnicas juntas:no puede (y no es necesario) ejecutar sp_refreshsqlmodule contra objetos vinculados al esquema.

por ejemplo, solo puede ejecutarlo en estos módulos:

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
                )