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

MS SQL Server Discussion :

fonction ou pas


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut fonction ou pas
    Bonjour,

    dans un ETL, j'ai souvent ce bloc dans les select

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONVERT(NUMERIC(30,2),ROUND(SUM(ISNULL(REVENUE,0)*CONVERT(DECIMAL(15,10),(1/CASE WHEN R.CURRENCY_CODE =''' + @PIVOTCURRENCY + ''' THEN 1 ELSE A.RATE END ))*(CASE WHEN ''' + @CURRENCY + '''=''' + @PIVOTCURRENCY + ''' THEN 1 ELSE B.RATE END)),2)) REVENUE
    ma question:
    faut-il faire une fonction du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create function dbo.calc_revenue (@revenue float,@PIVOTCURRENCY varchar(50),@CURRENCY varchar(50)) return NUMERIC(30,2)
    ou laisser le bloc ?

    aura t on un gain de faire une function ?

    merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Par défaut
    Le seul avantage dans ce cas à utiliser une fonction est pour la clarté du code.

    Une fonction est parfois un choix judicieux quand il faut sortir du contexte T-SQL comme pour faire des opérations répétitives ou avec des choix multiples en grandes quantités.

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Effectivement, on pourrait en faire une fonction de type TABLE en ligne, qui ne retourne qu'une seule ligne. Veillez à l'utiliser avec l'opérateur APPLY
    Attention à ne pas en faire une fonction scalaire qui est appelée pour chaque ligne du résultat (on peut le voir à l'aide de l'outil Profiler).

    @++

  4. #4
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    merci Elsuket,

    donc un truc que j'utiliserai du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select * 
    from toto
           cross apply dbo.calc_revenue (@xxx)
    ?

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Exactement

    @++

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

Discussions similaires

  1. Winsock fonction recv pas fiable?
    Par ssmint dans le forum Développement
    Réponses: 4
    Dernier message: 26/11/2007, 20h41
  2. Réponses: 5
    Dernier message: 02/10/2006, 19h24
  3. Réponses: 4
    Dernier message: 19/08/2006, 22h58
  4. [Mail] Problème fonction mail() pas de sujet ni corps!
    Par webrider dans le forum Langage
    Réponses: 3
    Dernier message: 28/06/2006, 17h04
  5. [PHP-JS] Fonction header pas acceptée
    Par carelha dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2006, 18h41

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