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:
- Entrer
- Alt+C
- Échapper
- Échapper
- Flèche Vers Le Bas
- 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
Vous devez vous connecter pour publier un commentaire.
Vous pouvez également le faire "sur place" - sans se toutes les instructions de création.
Outre la définition de l'
NOEXEC ON
vous aurez également besoin de mettre votre favoriSHOWPLAN_* ON
(j'utiliseSHOWPLAN_TEXT
). Maintenant, vous pouvez vous débarrasser de votre étape 2 et de l'exécuter à chaque procédure que vous avez récupéré à l'étape 1.Voici un exemple de l'aide de la procédure stockée. Vous pouvez l'utiliser dans votre préféré boucle:
L'exemple ci-dessus doit générer le résultat suivant:
Si vous utilisez sql 2008 r2 ou au-dessous de ne pas les utiliser
MIS À NOEXEC SUR
Il vérifie seulement la syntaxe et non pas pour les erreurs potentielles comme l'existence de tables ou de colonnes.
Au lieu d'utilisation:
FMTONLY SET SUR
il va faire une compilation complète qu'il essaie de retourner les méta-données de la procédure stockée.
Pour 2012 et vous aurez besoin d'utiliser une procédure stockée:
sp_describe_first_result_set
Aussi, vous pouvez faire un script complet en Tsql qui vérifie tous les sp et les points de vue, c'est juste un peu de travail.
Mise à JOUR
J'ai rédigé une solution complète pour en tsql qui passe par tous définis par l'utilisateur stockées procédures et des contrôles, il y syntaxe. le script est de longue haleine, mais peut être trouvé ici http://chocosmith.wordpress.com/2012/12/07/tsql-recompile-all-views-and-stored-proceedures-and-check-for-error/
Le chèque proposé par KenJ est certainement le meilleur d'un seul, depuis le recréer/alter-approches ne trouve pas toutes les erreurs. E. g.
Veuillez trouver ma version qui vérifie tous les SPs à la fois avec KenJ la méthode ci-dessous. Autant que je sache, il permet de détecter toutes les erreurs qui va garder la SP d'être exécutée.
En outre, vous pouvez envisager d'utiliser Visual Studio Team System 2008 Database Edition qui, entre autres choses, est un statique de la vérification de toutes les procédures stockées dans la projet à construire, de manière à assurer que tous sont compatibles avec le schéma actuel.
Je sais que c'est vieux, mais j'ai créé une version légèrement différente qui fait re-crée de toutes les procédures stockées, jetant ainsi les erreurs si elles ne peuvent pas compiler. C'est quelque chose que vous n'avez pas d'atteindre à l'aide de la SP_Recompile commande.
Un peu tiré en option:
(sauvegarde et restauration). Vous pouvez le faire sur la base de données cible, si votre niveau de confiance est élevé.
procédures stockées dans un seul fichier de script
Couple de ces pièges, tels que:
puis déposez proc ALLEZ créer proc ..."
la syntaxe de separte chaque procédure.
appeler un proc qui n'a pas encore été
(re)créé. Exécution du script à plusieurs
fois doit attraper que (depuis
la commande correctement peut être un véritable
la douleur).
Rapidement tomber de 10 ou 1000 procédures, exécutez
sélectionnez la sortie, et de l'exécuter.
Cela suppose que vous êtes en train de faire un très peu tâche. Si vous devez le faire de façon régulière (quotidienne, hebdomadaire...), s'il vous plaît laissez-nous savoir pourquoi!
Il n'y a aucun moyen de le faire à partir de T-SQL, ou Enterprise Manager, donc j'ai dû écrire quelque chose de code client. je ne vais pas poster tout le code ici, mais l'astuce consiste à:
1) Obtenez une liste de toutes les procédures stockées
2) Obtenir la procédure stockée créer des T-SQL:
3) Exécutez l'instruction de création avec l'option NOEXEC, de sorte que la syntaxe est vérifié, mais il n'a pas vraiment d'essayer de créer la procédure stockée:
Ici est un amendement qui traite de multiples schémas
Je sais que c'est une vieille question, mais c'est ma solution quand je ne pouvais pas trouver un répondant.
- Je valider mes procédures stockées et des vues après beaucoup de changements dans la base de données.
Bref ce que je voulais, c'était pour essayer de faire un ALTER PROCEDURE et de MODIFIER la VUE en utilisant les procédures actuelles et de la vue (et non pas le modifier).
J'ai écrit ce qui fonctionne assez bien.
Remarque! Ne pas effectuer en direct à la base de données, en faire une copie pour valider et corriger ensuite les choses ont besoin de fixation. Aussi sys.sql_modules peut être incompatible donc prendre des précautions supplémentaires. Je n'ai pas l'utiliser pour des modifications, seulement pour vérifier ce qui ne fonctionne pas correctement.