2009-10-21 7 views
0

Ce que je veux faire est de simuler un clic droit sur une procédure stockée en sélectionnant Modifier, puis exécuter pour que ma procédure stockée s'exécute.Comment effectuer par programme une modification sur toutes les procédures stockées dans ma base de données dans SQL 2008

Certaines tables de notre base de données ont changé et tous les sp n'ont pas été modifiés. SP-à-dire vieux =

PROCÉDURE ALTER [dbo]. [MyProcedure] SELECT nom, adresse, typename des noms GO

Ensuite, la table de noms a été modifiée et la colonne de typename enlevés.

Si je clique sur modifier sur le SP, alors j'obtiens un message d'erreur dans la fenêtre de sortie des messages.

Je voudrais faire cela pour chaque sp dans ma base de données afin que je puisse voir qu'il fonctionne sans erreurs. (nous avons 200 sps et il faudrait beaucoup de temps pour le faire manuellement)

Toutes les idées seraient grandement appréciées.

Répondre

1

Vous devez composer un fichier texte des cas de test sous la forme:

exec <stored proc> [args] 
if (@@error <> 0) 
begin 
    print "Fail" 
end  
go 

Malheureusement, il n'y a aucun moyen d'automatiser cette autre à moins que ce soit:

  • Aucune de vos procédures stockées prennent des paramètres.
  • Vos paramètres de procédure stockée sont dérivables (hautement improbables).

Même si vous ne fournissez un ensemble particulier de valeurs de paramètres, cela ne teste globalement que tous les procs stockés dans votre base de données sont sans bug. Il vérifie simplement que le sproc s'exécute pour ces arguments particuliers. La ligne du bas: Il n'y a aucun raccourci quand il s'agit de tests unitaires.

+0

Vous avez raison: le * OP * ne peut pas contourner le test unitaire ici –

0

Vous pouvez écrire un curseur pour parcourir chacune d'elles en les exécutant. Mais comment sauriez-vous quelles sont les valeurs à fournir pour les paramètres d'entrée? Si aucun d'entre eux n'a de paramètres, quelque chose comme ça va fonctionner.

DECLARE @proc sysname 
DECLARE cur CURSOR FOR SELECT '[' + schema_name(schema_id) + '].[' + name + ']' 
FROM sys.procedures 
OPEN cur 
FETCH NEXT FROM cur INTO @proc 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    EXEC (@proc) 
    FETCH NEXT FROM cur INTO @proc 
END 
CLOSE cur 
DEALLOCATE cur 

paramètres de manipulation (en supposant que vous pouvez trouver les valeurs à utiliser) serait dans le même sens avec une boucle interne pour obtenir les noms de paramètres, puis leur fournir des valeurs.

Questions connexes