IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Best practice : Procedure stockée ou Fonction


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 68
    Points : 40
    Points
    40
    Par défaut Best practice : Procedure stockée ou Fonction
    Bonjour

    J'ai une question d'ordre "philosophique". Elle consiste en un choix d'utilisation d'une fonction ou d'une procédure stockée.

    J'ai crée une procédure stockée qui contient un SELECT.
    Il est "alimenté" par des données issues de tables mais aussi de variables implémentée par des calculs en amont du SELECT.
    Je souhaiterais déporter ces calculs dans d'autres objets.
    Techniquement, la chose semble possible aussi bien dans des "sous" procédures stockées mais aussi dans des fonctions.
    Quelle solution est préférable et pourquoi.

    Merci d'avance

    Herve Aouate

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 35
    Points : 41
    Points
    41
    Par défaut
    bonjour,

    je suis toujours embêter lorsque je vois les termes best pratice.

    Sur le principe il y a pas un mieux que l'autre. Il faut utiliser le meilleur en fonction de ton besoin.
    Les deux existes il y a une raison ...

    Louis Malta

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 68
    Points : 40
    Points
    40
    Par défaut
    Justement, je désirerais connaitre ces raisons.
    Je ne cherchais justement pas un principe mais la solution la plus adaptée à mon cas.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 35
    Points : 41
    Points
    41
    Par défaut
    Ok désolé,



    Si tu veux la réutilisabilité les deux sont valables. Les fonctions sont une facilité mais dans certains cas peuvent être très coûteuse pour les perf.

    Personnellement je passe plus facilement par des procs que des fonctions
    Tous simplement pour une question de portabilité (nous avons encore des SQL 7 donc pas de fonction)
    Je fais beaucoup de traitement de masse donc je passe beaucoup par des tables temporaires beaucoup performantes sur des gros volumes.

    En même temps si tu dois rééffectuer les même calcules sur plusieurs endroits peut être ne devrais tu pas stocker le résultat du calcul en table.

    Dans le doute
    fait les deux et utilises : set statistics io on
    et compare les stat tu sauras alors laquelle est la plus adaptée à ton cas.

    Louis Malta

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 68
    Points : 40
    Points
    40
    Par défaut
    Super !!!
    Merci beaucoup

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 865
    Points : 53 021
    Points
    53 021
    Billets dans le blog
    6
    Par défaut
    Les fonctions table, c'est à dire renvoyant une table sont élégantes à utiliser si la requête se fera toujours sans jointure, sinon, c'est un cauchemar et il faut la plupart du temps utiliser les opérateurs d'intra jointure CROSS APPLY / OUTER APPLY.

    Une procédure stockée est mieux paramétrable mais ne permet pas de faire de jointure.

    Entre les deux il est difficile de dire ce qui est mieux. Cela dépend de ce que l'on va en faire !

    Quand à cette affirmation :
    Je fais beaucoup de traitement de masse donc je passe beaucoup par des tables temporaires beaucoup performantes sur des gros volumes.
    Elle est généralement fausse, mais vient du fait que la plupart des développeurs ne savent pas écrire des requêtes complexes. En effet l'usage de table temporaires oblige le serveur à des opérations d'écritures disque, opérations qui pourrait être évitées en formulant une seule requête en lieu et place d'un amalgame de requêtes sur table temporaires produisant d'autres tables temporaires... etc !
    par exemple une récriture via CTE est souvent bien plus performante...

    A +

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/03/2014, 18h02
  2. Procedure Stockée à double fonction
    Par jubourbon dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/04/2009, 10h00
  3. Réponses: 4
    Dernier message: 05/03/2009, 13h52
  4. Difference procedure stocké et fonction ?
    Par MaxiMax dans le forum Langage SQL
    Réponses: 5
    Dernier message: 10/08/2005, 13h13
  5. procedure stockée et fonction "split"
    Par wehtam dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/07/2005, 16h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo