La syntaxe vérifie toutes les procédures stockées?

je veux m'assurer que toutes les procédures stockées sont encore syntaxiquement valide. (Cela peut arriver si quelqu'un renomme ou supprime une table/colonne).

Maintenant ma solution pour vérifier la syntaxe de toutes les procédures stockées est d'aller dans le Gestionnaire Enterprise manager, sélectionnez la première procédure stockée dans la liste, et l'utilisation de la procédure:

  1. Entrer
  2. Alt+C
  3. Échapper
  4. Échapper
  5. Flèche Vers Le Bas
  6. Goto 1

Il fonctionne, mais c'est assez fastidieux. j'aimerais une procédure stockée appelée

SyntaxCheckAllStoredProcedures

comme les autres de la procédure stockée que j'ai écrit qui fait la même chose pour les vues:

RefreshAllViews


Pour le bénéfice de tous, 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

Pour le bénéfice de tous, une procédure stockée pour marquer toutes les procédure stockée en tant que besoin d'une recompilation (marquage d'une procédure stockée pour recompiler ne vais pas vous dire si elle est syntaxiquement valide):

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

Par souci d'exhaustivité, le UpdateAllStatistics procédure. Ceci mettra à jour toutes les statistiques de la base de données en effectuant une complète analyse de données:

RefreshAllStatistics.prc

CREATE PROCEDURE dbo.RefreshAllStatistics AS

EXECUTE sp_msForEachTable 'UPDATE STATISTICS ? WITH FULLSCAN'

source d'informationauteur Ian Boyd