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 :

requete paramatre [WHERE IN @]


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 194
    Points : 74
    Points
    74
    Par défaut requete paramatre [WHERE IN @]
    Salut,
    J'essaie de faire une requete parametre pour selectionner des elements.
    Prenons par exemple une table Eleve composée de comme suit:
    -Nom
    -Prenom
    -Classe

    et une table Niveau

    -Classe
    -CommentaireNiveau

    En admettant qu'un eleve peut etre dans plusieurs classe, je voudrais faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select Nom,Prenom
    From Class 
    WHERE Classe in (@lesClasses)
    Et dans le parametre @lesClasses j'ai par exemple : CE1, CE2,CM2.

    Quand je lance la requete, je n'obtient aucun resultat.
    Je pense que le SGBD cherche une classe nommée " CE1, CE2,CM2"
    Est il possible de lui dire que @lesClasses est un parametre composé.
    En fait, le nombre de classes (CE1, CE2,CM2 ) varie selon l'utilisateur du coup je peux pas mettre trois parametres genre @classe1, @classe2, @classe3.

    Vous avez une idée?

  2. #2
    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 : 43
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Je pense que le SGBD cherche une classe nommée " CE1, CE2,CM2"
    C'est effectivement ce qui se passe.

    Est il possible de lui dire que @lesClasses est un parametre composé.
    En fait, le nombre de classes (CE1, CE2,CM2 ) varie selon l'utilisateur du coup je peux pas mettre trois parametres genre @classe1, @classe2, @classe3.
    Vous pouvez pou cela créer une fonction comme suit, qui découpe les valeurs que vous transmettez en paramètre :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    CREATE FUNCTION fn_split(@string nvarchar(max), @delimiter nchar(1))
    	RETURNS @t TABLE (token nvarchar(max))
    	WITH SCHEMABINDING
    AS
    BEGIN
    	DECLARE	@next_string nvarchar(max)
    		, @pos int
    		, @delim_size int
    		, @next_pos int
     
    	SELECT	@next_string = '',
    		@string = @string + @delimiter
     
    	SET @pos = CHARINDEX(@delimiter, @string)
    	SET @next_pos = 1
     
    	WHILE (@pos <> 0)  
    	BEGIN
    		SET @next_string = SUBSTRING(@string, 1, @pos - 1)
     
    		INSERT INTO @t (token) VALUES(@next_string)
     
    		SET @string = SUBSTRING(@string, @pos + 1, LEN(@string))
    		SET @next_pos = @pos
    		SET @pos = CHARINDEX(@delimiter, @string)
    	END
    	RETURN
    END
    Puis l'utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Nom,Prenom
    FROM Class 
    WHERE Classe IN (SELECT token FROM dbo.fn_split(@lesClasses, ','))
    @++

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 194
    Points : 74
    Points
    74
    Par défaut
    Woua impressionant ta fonction!

    J'ai quelques question :
    WITH SCHEMABINDING signifie quoi?
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    BEGIN
    	DECLARE	@next_string nvarchar(max) 
    		, @pos int
    		, @delim_size int
    		, @next_pos int
     
    --Pourquoi fait on un select ??
    	SELECT	@next_string = '',
                 		@string = @string + @delimiter 
     --ici on initialise
    	SET @pos = CHARINDEX(@delimiter, @string)
    	SET @next_pos = 1  --pourquoi 1?
     
    	WHILE (@pos <> 0)  
    	BEGIN
    		SET @next_string = SUBSTRING(@string, 1, @pos - 1) -- on reupere les valeurs sans les virgules
     
    		INSERT INTO @t (token) VALUES(@next_string)
     
    --on enleve la valeurs ajoutée dans la table
    		SET @string = SUBSTRING(@string, @pos + 1, LEN(@string))
    --a quoi sert @next_pose??
    		SET @next_pos = @pos
    --on recherche le prochain ','
    		SET @pos = CHARINDEX(@delimiter, @string)
    	END
    	RETURN
    END
    C'est la premiere fois que j'utilise une fonction, je ne comprends pas tres bien desole.
    Ceci @pos = CHARINDEX(@delimiter, @string)
    et cela SET @pos = CHARINDEX(@delimiter, @string)

    sont differents?

    Merci beaucoup.

Discussions similaires

  1. requete avec "WHERE" dynamique
    Par Mickael Scofild dans le forum Requêtes
    Réponses: 1
    Dernier message: 11/08/2007, 22h51
  2. requete avec where..date du jour
    Par hermine dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/08/2007, 10h30
  3. [SQL Server] requete sql 'where'
    Par khayate dans le forum Langage SQL
    Réponses: 18
    Dernier message: 25/05/2007, 16h42
  4. requete SQL: where avec parametre variable
    Par dracula2000 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 06/05/2006, 22h46
  5. Probleme de requete, clause where et nombre a virgule..
    Par forest82 dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/12/2005, 19h19

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