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 :

Operateur IN parametrable


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2008
    Messages : 96
    Par défaut Operateur IN parametrable
    Bonjour

    j'ai impléméenté une procedure stocké qui va prendre en parametre un nvarchar
    qui répresente la valeur dans l'operateur IN

    exple

    si je fai :
    select * from T where att in ('val)
    -> j'aurais des resultats affiché sur l'ecran

    pourtant le meme requete parametré suivante ça donne pas des resultats
    declare @x nvarchar(100)
    set @x='''val'''
    select * from T where att in (@x)
    -

    (@x est un argument de la procedure stockée)
    il est construit à partir d'un multiselect checkboxes

  2. #2
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Il faut passer par une fonction "split" (à écrire par tes propres soint) qui éclate la variable "@x" en une colonne de plusieurs lignes (variable de type table).

    A ce moment, la syntaxe sera where colonne in (split(@x))

  3. #3
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2011
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 118
    Par défaut
    Bonjour,

    Pour commencer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from T where att in ('val')
    c'est différent de ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    declare @x nvarchar(100)
    set @x='''val'''
    select * from T where att in (@x)
    Pour avoir la même chose il faudrait faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    declare @x nvarchar(100)
    SET @x='val'
    SELECT * FROM T WHERE att IN (@x)
    Maintenant, ça marche pour une seule valeur dans la variable (et donc pas d'intérêt d'utiliser NOT IN...)


    Pour ton cas, comme proposer par StringBuilder, tu peux utiliser une fonction split "maison" lorsqu'il existe plusieurs valeurs dans la variable.

    Si tu es en 2008, tu peux utiliser un type table défini par l'utilisateur en tant que paramètre de ta procédure stocké.
    http://msdn.microsoft.com/fr-fr/libr...ql.105%29.aspx

    Et en dernier recours, mais alors tout dernier recours, j'ai même honte de te proposer cette solution... (si la virgule est ton séparateur de valeur)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from T where ',' + @x + ',' NOT LIKE '%,' + att + ',%'
    Je pense qu'il n'y a rien de pire que cette syntaxe.

  4. #4
    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
    et pour une fonction de splittage : http://blog.developpez.com/sqlpro/p7...esure_multiple

    Cela dit il est préférable de passer par une vrai table....
    soit temporaire (et indexée)
    soit de base en ajoutant une colonne de session (genre GUID).

    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/ * * * * *

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2008
    Messages : 96
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    et pour une fonction de splittage : http://blog.developpez.com/sqlpro/p7...esure_multiple

    Cela dit il est préférable de passer par une vrai table....
    soit temporaire (et indexée)
    soit de base en ajoutant une colonne de session (genre GUID).

    A +
    Merci beaucoup SqlPro et StringBuilder
    en fait c'été à cause de ça

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

Discussions similaires

  1. Probleme avec parametre operateur
    Par ogrilus dans le forum Langage
    Réponses: 9
    Dernier message: 21/12/2011, 08h46
  2. Réponses: 1
    Dernier message: 18/01/2008, 18h41
  3. [Parametre] operateur de comparaison
    Par ZaaN dans le forum C++
    Réponses: 1
    Dernier message: 21/12/2005, 18h51
  4. Passage de parametre a une anim Flash 5
    Par debug dans le forum Intégration
    Réponses: 4
    Dernier message: 03/06/2002, 17h59
  5. transmision de tableau en parametre
    Par Horus dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/05/2002, 11h15

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