-- Script para validar automáticamente todos los objetos (stored procedures y vistas) y determinar si es necesario recompilarlos
-- Variable para almacenar el nombre de la base de datos
DECLARE @DatabaseName NVARCHAR(128);
SET @DatabaseName = DB_NAME(); -- Usa la base de datos actual
-- Tabla temporal para almacenar los resultados
CREATE TABLE #ObjectsToRecompile (
ObjectName NVARCHAR(128),
ObjectType NVARCHAR(128),
RecompileNeeded BIT
);
-- Cursor para recorrer todos los objetos (stored procedures y vistas)
DECLARE ObjectCursor CURSOR FOR
SELECT name, type
FROM sys.objects
WHERE type IN ('P', 'V') -- 'P' para stored procedures, 'V' para vistas
AND is_ms_shipped = 0; -- Excluir objetos del sistema
DECLARE @ObjectName NVARCHAR(128);
DECLARE @ObjectType NVARCHAR(128);
DECLARE @CurrentDefinition NVARCHAR(MAX);
DECLARE @CompiledDefinition NVARCHAR(MAX);
OPEN ObjectCursor;
FETCH NEXT FROM ObjectCursor INTO @ObjectName, @ObjectType;
WHILE @@FETCH_STATUS = 0
BEGIN
-- Obtener la definición actual del objeto
SELECT @CurrentDefinition = OBJECT_DEFINITION(OBJECT_ID(@ObjectName));
-- Obtener la definición compilada del objeto
SELECT @CompiledDefinition = definition
FROM sys.sql_modules
WHERE object_id = OBJECT_ID(@ObjectName);
-- Comparar las definiciones actual y compilada
IF @CurrentDefinition = @CompiledDefinition
BEGIN
INSERT INTO #ObjectsToRecompile (ObjectName, ObjectType, RecompileNeeded)
VALUES (@ObjectName, @ObjectType, 0); -- No es necesario recompilar
END
ELSE
BEGIN
INSERT INTO #ObjectsToRecompile (ObjectName, ObjectType, RecompileNeeded)
VALUES (@ObjectName, @ObjectType, 1); -- Es necesario recompilar
END
FETCH NEXT FROM ObjectCursor INTO @ObjectName, @ObjectType;
END
CLOSE ObjectCursor;
DEALLOCATE ObjectCursor;
-- Mostrar los resultados
SELECT * FROM #ObjectsToRecompile
WHERE RecompileNeeded = 1;
-- Limpiar la tabla temporal
DROP TABLE #ObjectsToRecompile;
No hay comentarios:
Publicar un comentario