20.07.2014

SQL: перекомпилляция всех хранимых процедур

Иногда после изменений структуры таблиц БД приходится вносить соответствующие изменения в хранимые процедуры, при этом всегда можно забыть что-либо забыть. Узнаете об этом вы только после того, как вызовете данную хранимую процедуру. Для проверки того, что все хранимые процедуры после изменений будут, как минимум, запускаться можно использовать следующий трюк - выполнение перекомпилляции всех имеющихся хранимых процедур. Для этого ниже приведен код хранимой процедуры под MS SQL Server, если какая-то процедур на сможет быть перекомпиллирована будет выдано сообщение об ошибке:

CREATE PROCEDURE p_RecompileAllStoredProcedures
(
    @Verbose bit = 0
)
AS
BEGIN    
DECLARE @SQL NVARCHAR(MAX)
DECLARE @ProcedureName NVARCHAR(255)           

DECLARE Procedures CURSOR FOR
    SELECT NAME, OBJECT_DEFINITION(o.object_id)
    FROM sys.objects AS o 
    WHERE o.[type] = 'P' AND o.name <> 'p_Kladr_Upgrade'
    ORDER BY o.name

OPEN Procedures
FETCH NEXT FROM Procedures
INTO @ProcedureName, @SQL
WHILE @@FETCH_STATUS = 0 
BEGIN       
    SET @SQL = 'ALTER ' + RIGHT(@SQL, LEN(@SQL) - (CHARINDEX('CREATE', @SQL) + 6))

    IF @Verbose <> 0 
 PRINT @ProcedureName

    EXEC(@SQL)

    FETCH NEXT FROM Procedures
    INTO @ProcedureName, @SQL
END
CLOSE Procedures
DEALLOCATE Procedures
END

Комментариев нет:

Отправить комментарий