¿Revisar la sintaxis de todos los procedimientos almacenados?

Quiero asegurarme de que todos los procedimientos almacenados todavía son sintácticamente válidos. (Esto puede suceder si alguien renombra / borra una tabla / columna).

En este momento, mi solución para verificar la sintaxis de todos los procedimientos almacenados es ingresar a Enterprise Manager, seleccionar el primer procedimiento almacenado en la lista y usar el procedimiento:

EntrarAlt + CEscaparEscaparFlecha hacia abajoGoto 1

Funciona, pero es bastante tedioso. me gustaría un procedimiento almacenado llamado

SyntaxCheckAllStoredProcedures

como el otro procedimiento almacenado que escribí que hace lo mismo para las vistas:

Actualizar todas las vistas

Para el beneficio de todos, RefreshAllViews:

ActualizarAllViews.prc

CREATE PROCEDURE dbo.RefreshAllViews AS

-- This sp will refresh all views in the catalog. 
--     It enumerates all views, and runs sp_refreshview for each of them

DECLARE abc CURSOR FOR
     SELECT TABLE_NAME AS ViewName
     FROM INFORMATION_SCHEMA.VIEWS
OPEN abc

DECLARE @ViewName varchar(128)

-- Build select string
DECLARE @SQLString nvarchar(2048)

FETCH NEXT FROM abc 
INTO @ViewName
WHILE @@FETCH_STATUS = 0 
BEGIN
    SET @SQLString = 'EXECUTE sp_RefreshView '+@ViewName
    PRINT @SQLString
    EXECUTE sp_ExecuteSQL @SQLString

    FETCH NEXT FROM abc
    INTO @ViewName
END
CLOSE abc
DEALLOCATE abc

Para el beneficio de todos, un procedimiento almacenado para marcar todo el procedimiento almacenado como una necesidad de recompilación (marcar un procedimiento almacenado para la recompilación no le dirá si es sintácticamente válido):

RecompileAllStoredProcedures.prc

CREATE PROCEDURE dbo.RecompileAllStoredProcedures AS

DECLARE abc CURSOR FOR
     SELECT ROUTINE_NAME
     FROM INFORMATION_SCHEMA.routines
    WHERE ROUTINE_TYPE = 'PROCEDURE'
OPEN abc

DECLARE @RoutineName varchar(128)

-- Build select string once 
DECLARE @SQLString nvarchar(2048)

FETCH NEXT FROM abc 
INTO @RoutineName
WHILE @@FETCH_STATUS = 0 
BEGIN
    SET @SQLString = 'EXECUTE sp_recompile '+@RoutineName
    PRINT @SQLString
    EXECUTE sp_ExecuteSQL @SQLString

    FETCH NEXT FROM abc
    INTO @RoutineName
END
CLOSE abc
DEALLOCATE abc

En aras de la integridad, elActualizar todas las estadísticas procedimiento. Esto actualizará todas las estadísticas en la base de datos haciendo un análisis completo de los datos:

ActualizarAllStatistics.prc

CREATE PROCEDURE dbo.RefreshAllStatistics AS

EXECUTE sp_msForEachTable 'UPDATE STATISTICS ? WITH FULLSCAN'

Respuestas a la pregunta(9)

Su respuesta a la pregunta