Trate this
sp_refreshsqlmodule llamado a todos los no-esquema de procedimientos almacenados con destino:
DECLARE @template AS varchar(max)
SET @template = 'PRINT ''{OBJECT_NAME}''
EXEC sp_refreshsqlmodule ''{OBJECT_NAME}''
'
DECLARE @sql AS varchar(max)
SELECT @sql = ISNULL(@sql, '') + REPLACE(@template, '{OBJECT_NAME}',
QUOTENAME(ROUTINE_SCHEMA) + '.'
+ QUOTENAME(ROUTINE_NAME))
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
EXEC (
@sql
)
Esto funciona para todas las vistas, funciones y SP. Los objetos Schemabound no tendrán problemas y esto no se puede ejecutar en ellos, por eso están excluidos.
Tenga en cuenta que aún es posible que falle el SP en tiempo de ejecución debido a que faltan tablas, esto es equivalente a intentar ALTERAR el procedimiento.
Tenga en cuenta también que, al igual que ALTER, perderá propiedades extendidas en UDFs - Intento script de las mismas y las restauro después.
duplicado posible de [Encuentra objetos rotos en SQL Server] (https://stackoverflow.com/questions/2330521/find-broken-objects-in-sql-server) – devinbost