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 :

Procédure stockée et paramètre varchar contenant une liste


Sujet :

Développement SQL Server

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Procédure stockée et paramètre varchar contenant une liste
    Bonjour,

    J'ai une procédure stockée avec un paramètre de type varchar qui permet de passer une "liste".

    Je souhaite avoir vos avis concernant l'utilisation ou non de sql dynamique pour les performance d'exécution de la procédure stockée.

    Exemple : le 1er paramètre contient une liste d'une centaine d'éléments et le second 2-3 éléments et souvent les mêmes
    Dans le 1er cas, j'utilise un fonction SPLIT qui retourne une table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE PROC TEST @param1 varchar(max), @param2 varchar(max)
    BEGIN
      SELECT * 
      FROM ma_Table
         INNER JOIN monSPLIT(@param1) s1 ON s1.value = ma_Table.value1
         INNER JOIN monSPLIT(@param2) s2 ON s2.value = ma_Table.value2
    END
    Dans le 2nd cas, j'utilise du sql dynamique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE PROC TEST @param1 varchar(max), @param2 varchar(max)
    DECLARE 
      @vCmd nvarchar(MAX),
      @vStatemt nvarchar(500)
    BEGIN
      SET @vCmd = 'SELECT * 
      FROM ma_Table
        INNER JOIN monSPLIT(@param1) s1 ON s1.value = ma_Table.value1
      WHERE ma_Table.value IN ( ' + @param2 + ') '
     
      SET @vStatemt = N'@pparam1 VARCHAR(max)';
      EXEC sp_executesql @vCmd, @vStatemt, @pparam1=@param1;	
    END
    J'ai remarqué que le second cas était plus rapide à l'exécution, néanmoins, certaines personnes me déconseillent d'utiliser du sql dynamique.
    Quels sont vos avis? en fait c'est le SPLIT qui renvoie une TABLE qui est trop gourmand (jointure en plus) avez-vous une autre solution?

    merci

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Est-ce que votre fonction split est une fonction table incluse ou a instructions multiples ?

    Il est probable que cette façon de procéder conduise l’optimiseur à estimer une seule ligne en retour de la fonction, ce qui est loin des 100 que vous indiquez, et donc de produire un mauvais plan d’exécution.

    Vous pouvez essayer de créer une table temporaire, et la peupler avec votre fonction split. Utilisez ensuite cette table temporaire dans votre requête

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/05/2013, 14h29
  2. [Débutant] Appel d'une procédure stockée avec paramètre en output
    Par Malainet dans le forum Linq
    Réponses: 5
    Dernier message: 11/02/2013, 16h26
  3. [Débutant] Appel d'une procédure stockée avec paramètres
    Par Bakkach dans le forum VB.NET
    Réponses: 6
    Dernier message: 09/10/2012, 16h41
  4. [CR XI] Utilisation d'une procédure stockée avec paramètre(s)
    Par ferranzo dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 08/09/2011, 20h26
  5. Lancement d'une procédure stockée avec paramètres
    Par ptitenana_vtq dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 08/06/2010, 15h16

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