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 :

Procédure stockée avec paramètre à valeurs multiples


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Septembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2
    Par défaut Procédure stockée avec paramètre à valeurs multiples
    Bonjour,

    Je veux créer une procédure stockée qui accepte un paramètre qui contient une liste de valeurs.

    J'ai donc procédé comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [niku].[A_SY_TEST_PARAM_MULTIVALUES]
    (
    @pParam numeric
    )
    AS
    BEGIN
      SET NOCOUNT ON
     
    SELECT
    RES.FULL_NAME
    FROM NIKU.SRM_RESOURCES RES
    WHERE
    RES.ID IN (@pParam)
     
     SET NOCOUNT OFF
    END
    Quand je teste la procédure stockée comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [niku].[A_SY_TEST_PARAM_MULTIVALUES] 5020361
    j'obtiens bien la réponse désirée, par contre j'ai un message d'erreur quand je teste avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [niku].[A_SY_TEST_PARAM_MULTIVALUES] 5020361, 5000001
    Le message dit :
    Trop d'arguments sont spécifiés pour la procédure ou la fonction A_SY_TEST_PARAM_MULTIVALUES
    J'aimerais donc savoir comment faire pour donner une liste de valeurs à mon paramètre ?
    Merci pour votre aide et bonne journée.

    Cordialement,

  2. #2
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Hello,

    La syntaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [niku].[A_SY_TEST_PARAM_MULTIVALUES] 5020361, 5000001
    .. implique que ta procédure stockée utilisée 2 paramètres.

    Tu as différentes méthodes pour cela avec avantages et inconvénients :

    - Passer un document XML dans lequel tu spécifies tes paramètres à utiliser
    - Passer par un paramètre de type table
    - Passer par une table temporaire
    ...

    ++

  3. #3
    Membre expérimenté
    Avatar de SQL_EVAN
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2011
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 161
    Par défaut
    Oui, pour le faire à la main vous pouvez écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    EXEC [niku].[A_SY_TEST_PARAM_MULTIVALUES] 5020361;
    EXEC [niku].[A_SY_TEST_PARAM_MULTIVALUES] 5000001;

  4. #4
    Nouveau candidat au Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Septembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2
    Par défaut
    Merci pour vos réponses.

    Voici plus de détails sur mon besoin :

    Je mets à disposition des utilisateurs un rapport développé dans Crystal Reports qui se base sur une procédure stockée avec le paramètre d'entrée "@param". Le rapport est disponible dans un progiciel, l'utilisateur choisit les valeurs du paramètre dans celui-ci puis les valeurs sont envoyées à la procédure stockée.

    Dans ce paramètre, je voudrais laisser le choix à l'utilisateur de choisir plusieurs ID de ressources parmi la liste de tous les IDs afin d'afficher en résultats leur noms/prénoms.

    Cela fonctionne bien quand l'utilisateur choisit une seule valeur, mais ne fonctionne pas quand il en choisit plusieurs, la clause IN ne restitue rien.

    J'ai mis à jour mon code de la façon suivante pour pouvoir le tester avec deux valeurs réelles :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    USE [clarity]
    GO
     
    ALTER PROCEDURE [niku].[A_SY_TEST_PARAM_MULTIVALUES]
     
    AS
    BEGIN
      SET NOCOUNT ON
     
      CREATE TABLE #A_SY_TEST_MULTIVALUES (ID int)
     
      INSERT INTO #A_SY_TEST_MULTIVALUES VALUES (5020361)
      INSERT INTO #A_SY_TEST_MULTIVALUES VALUES (5000002)
     
    SELECT
    RES.FULL_NAME
    FROM NIKU.SRM_RESOURCES RES
    WHERE
    RES.ID IN (SELECT ID FROM #A_SY_TEST_MULTIVALUES)
     
    DROP TABLE #A_SY_TEST_MULTIVALUES
     
     SET NOCOUNT OFF
    END
    Cela fonctionne bien, maintenant je voudrais créer la table temporaire avec les valeurs choisies par l'utilisateur dans un paramètre @pParam.

    Comment déclarer le paramètre et comment le décomposer afin d'insérer chacune des valeurs dans la table temporaire ?

    Merci pour vos réponses, j'espère avoir été assez clair.

    Cordialement,

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    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 998
    Billets dans le blog
    6
    Par défaut
    4 solutions, du plus mauvais pour les perf, au meilleur :
    • vous passez les valeurs dans un document XML que vous parsez par une requête XQuery
    • vous utilisez du SQL dynamique
    • vous utilisez une variable table passée en argument
    • vous construisez dans votre base une table de valeur, l'alimentée et passez un tag pour prendre en compte les valeurs qui vous intéressent


    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/05/2013, 14h29
  2. 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
  3. Réponses: 0
    Dernier message: 15/04/2010, 13h54
  4. SQL - Procédure stockée avec paramètres
    Par jacquesprogram dans le forum VB.NET
    Réponses: 2
    Dernier message: 23/03/2009, 11h17
  5. [SQL2K5] Procédure stockée avec paramètre à valeurs multiple
    Par Jinroh77 dans le forum Développement
    Réponses: 1
    Dernier message: 16/05/2008, 17h31

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