none
génération de scripts RRS feed

  • Question

  • Bonjour,

    En Sql Server 2008, je génère les scripts uniquement pour les procédures stockées sur une database.

    Lors de la définition de cette génération, toutes les procédures stockées apparaissent dans l’ordre alphabétique. Je coche les procédures pour lesquelles je veux un script puis je lance la génération.

    La génération se passe sans problème, les procédures apparaissent sur l’écran dans l’ordre coché avec la mention ‘Success’ (j’ai la version US). Par contre dans le code généré, les procédures sont bien générées mais dans un ordre plutôt aléatoire.

    L’intérêt d’avoir les procédures stockées générées dans l’ordre alphabétique des noms est :

    - de pouvoir retrouver rapidement le code

    - de pouvoir comparer le code généré sur deux bases et de retrouver les modifs.

    Est-ce un bug ou y a-t-il un paramètre pour garder cet ordre ?

    Merci par avance pour vos réponses.

    Dominique

    jeudi 14 juin 2012 15:28

Toutes les réponses

  • Bonjour,

    Je ne sais pas mais je pense que SQL Server pourrait aussi essayer de les générer dans un ordre logique vis à vis des dépendances sans peut-être utiliser l'ordre alphabétique comme dernier critère ? Eventuellement une trace SQL Server ave le "profileur" permettrait peut-être de comprendre dans quel ordre il extrait les procédures...

    Sinon pour comparer il existe des outils comme http://www.sqldbtools.com/ qui pourraient être aussi voire plus pratiques....


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    jeudi 14 juin 2012 16:24
  • Merci pour la réponse et le lien (je vais l’essayer).

    Pour comparer, j’utilise généralement  :  http://opendbiff.codeplex.com/  qui n’est pas mal mais là je voulais comparer des procédures que je génère par ailleurs avec celles existant dans une database.

    L’ordre de génération suit peut être des dépendances bien que je n’en vois pas l’intérêt car mes procédures stockées sont indépendantes les unes des autres. En tout cas, ce n’est pas futé de générer dans un ordre qui est différent de l’ordre des résultats sur écran, ou du moins de ne pas le remettre dans le même ordre.

    Quant au profiler je ne l’utilise pas, je sais, c’est pas bien, mais, faute de temps, je ne me suis jamais penché dessus.

    Je vais résoudre mon problème en intégrant mes procédures dans une copie de la base et en faisant ensuite en comparaison entre bases.

    jeudi 14 juin 2012 18:20
  • Bonjour,

    Je crois me souvenir que lorsque l'on regénère les scripts de création des procédures stockées ( ou tables,functions, triggers ), ils sont générés dans un ordre logique : celui de la dépendance des objets entre eux. Autrement dit, si la procédure stockée A ( la 1ère de votre liste ) fait appel à la procédure stockée D ( la 4ème dans la liste ), il y aura génération du script de D avant celle de A et ce pour éviter des problèmes d'oubli de procédures nécessaires pour l'exécution d'une procédure donnée ( ce qui me semble logique

    Une autre raison pour ne pas avoir un ordre de génération des scripts basé sur un ordre alphabétique  est liée à la façon dont SSMS "retrouve" la définition des procédures stockées : SSMS en réalité s'appuie sur SMO et en particulier sur la propriété StoredProcedures de l'objet Database

    http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.database.storedprocedures(SQL.100).aspx

    StiredProcedures est en réalité un objet StoredProcedureCollection contenant l'ensemble des objets du type StoredProcedure et cette collection est en réalité triée sur la date de création de la procédure stockée

    http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.storedprocedurecollection(SQL.100).aspx

    SSMS reconstruit une liste des procédures stockées à scripter avec un ordre "logique" de création ( on ne va pas batir le 2éme étage d'une maison avant de s'occuper de la cave et du rez-de-chaussée ).C'est aussi pour cela que la création des scripts de plusieurs procédures stockées ( ou vues même problème ) nécessite un temps plus long que la somme des temps de création séparée pour chaque procédure stockées.

    Patrick Scribe a expliqué clairement le problème : il est plus facile pour un être humain de faire une recherche suivant un ordre alphabétique mais pour un ordinateur c'est l'ordre s'appuyant sur les dependances qui est primordial car il facilite l'implémentation du code (T-SQL ou SMO)

    Voir aussi http://msdn.microsoft.com/en-us/library/bb677315(SQL.100).aspx ( sys.sql_expression_dependencies )

    Bonne journée


    Mark Post as helpful if it provides any help.Otherwise,leave it as it is.


    jeudi 21 juin 2012 11:42
  • Bonjour dg78,

    Peut-être que vos procédures stockées sont indépendantes les unes des autres , mais , dans la réalité , cette indépendance n'est pas garantie.C'est pour cela que Microsoft s'appuie sur l'ordre de dépendance qui permet au code générant les scripts de ne rien oublier ( ou de tenter des créations en double ). Et c'est bien ce qui compte le plus : avoir un code sûr , complet et efficace ( le beau est trop souvent l'ennemi du bien )

    Bonne journée


    Mark Post as helpful if it provides any help.Otherwise,leave it as it is.

    jeudi 21 juin 2012 11:52