Sprawdź składnię wszystkich procedur przechowywanych?

chcę upewnić się, że wszystkie procedury przechowywane są nadal poprawne pod względem składniowym. (Może się tak zdarzyć, gdy ktoś zmieni nazwę / usunie tabelę / kolumnę).

W tej chwili moim rozwiązaniem sprawdzającym składnię wszystkich procedur składowanych jest przejście do Enterprise Manager, wybranie pierwszej procedury składowanej na liście i użycie procedury:

WchodzićAlt + CUcieczkaUcieczkaStrzałka w dółIdź do 1

To działa, ale jest dość nużące. Chciałbym wywołać procedurę przechowywaną

SyntaxCheckAllStoredProcedures

tak jak w innej zapisanej procedurze, którą napisałem, to samo dotyczy widoków:

RefreshAllViews

Dla wszystkich korzyści RefreshAllViews:

RefreshAllViews.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

Dla korzyści wszystkich procedura składowana oznaczająca wszystkie procedury składowane jako wymagające ponownej kompilacji (zaznaczenie procedury składowanej do ponownej kompilacji nie powie, jeśli jest poprawne składniowo):

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

Ze względu na kompletnośćUpdateAllStatistics procedura. Spowoduje to zaktualizowanie wszystkich statystyk w bazie danych poprzez wykonanie pełnego skanowania danych:

RefreshAllStatistics.prc

CREATE PROCEDURE dbo.RefreshAllStatistics AS

EXECUTE sp_msForEachTable 'UPDATE STATISTICS ? WITH FULLSCAN'

questionAnswers(9)

yourAnswerToTheQuestion