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 :

[TSQL] variable à utiliser pour une liste de paramètre


Sujet :

MS SQL Server

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 7
    Par défaut [TSQL] variable à utiliser pour une liste de paramètre
    Bonjour à tous !
    Je ne sais pas bien comment nommer mon post pour mon problème actuel...
    Mon problème est simple, bien qu'il ne soit pas très souvent utilisé. J'ai une procédure stockée pour traiter des enregistrements. Ceux-ci sont passés en paramètre, jusqu'à maintenant avec deux limites "de" "à". Désormais, les enregistrements ne sont plus contigus mais il me faut passer une liste pour faire un "WHERE IN (ma liste)". Comment faire cela ? Quel est le type à passer à ma SP pour qu'elle accèpte de faire cela ???

    Voici un petit exemple pour être plus clair
    --Ma SP
    CREATE PROCEDURE test
    @InVal varchar(10)
    AS
    SELECT INT_Nom,INT_Prenom FROM Intervenant WHERE INT_Numero IN (@InVal)
    GO

    --utilisation de la SP
    DECLARE @liste varchar(10)
    SET @liste='10,15,25,50'
    EXEC test @liste

    --erreur à l'exécution : Erreur de syntaxe lors de la conversion de la valeur varchar '10,15,25,5' vers une colonne de type de données int

    L'erreur est logique, mais comment faire pour que cela fonctionne ??
    Merci d'avance,
    pem

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    --Ma SP
    CREATE PROCEDURE test
    @InVal varchar(10)
    AS
    DECLARE @to_exec varchar(100)
    SET @to_exec ='SELECT INT_Nom,INT_Prenom FROM Intervenant WHERE INT_Numero IN ('+@InVal+')'
    Exec (@to_exec) 
    GO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    --utilisation de la SP
    DECLARE @liste varchar(100)
    SET @liste='10,15,25,50'
    EXEC test @liste

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 40
    Par défaut
    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
    CREATE FUNCTION [dbo].[fctSplitToInt](
      @DelimitedText VARCHAR(MAX), -- liste CSV
      @QuoteChar CHAR(1) -- caractère de délimitation
    ) RETURNS @Items TABLE (Item INTEGER)
         /* -- Retourne la liste sous la forme d'une colonne de nombres
         -- Nota bene : les items non déclarés (chaînes vides ou ne comprenant que le caractère d'espacement) sont ignorés
    */
    BEGIN
    	 DECLARE @Item VARCHAR(11)
     
    	     WHILE CHARINDEX(@QuoteChar, @DelimitedText, 0) <> 0 BEGIN
    			 SELECT @Item=SUBSTRING(@DelimitedText,1,CHARINDEX(@QuoteChar,@DelimitedText, 0)-1),
    				@DelimitedText=SUBSTRING(@DelimitedText,CHARINDEX(@QuoteChar,@DelimitedText, 0) + LEN(@QuoteChar), LEN(@DelimitedText))
    				IF LEN(RTRIM(@Item)) > 0
    					INSERT INTO @Items SELECT CONVERT(INTEGER, @Item)
    		END
     
    	-- Dernier item de la liste
         IF LEN(RTRIM(@DelimitedText)) > 0
         INSERT INTO @Items SELECT CONVERT(INTEGER, @DelimitedText)
         RETURN
     
    END

    Utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    --Ma SP
    CREATE PROCEDURE test
    @InVal varchar(10)
    AS
    SELECT INT_Nom,INT_Prenom FROM Intervenant WHERE INT_Numero IN (SELECT     Item
                                FROM          dbo.fctSplitToInt(@InVal , ',') AS fctSplitToInt_1)
    GO

    De cette manière, ton appel a la procédure ne change pas.

    J'avais récupéré cette méthode sur un autre site dont je ne me souviens pas l'auteur par contre

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 7
    Par défaut Merci Merci !!
    Merci beaucoup pour votre aide !
    A bientôt sur les forums

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/07/2014, 10h11
  2. Réponses: 1
    Dernier message: 27/09/2013, 16h45
  3. Réponses: 2
    Dernier message: 29/01/2013, 14h46
  4. [JSTL] l'utilisation de empty pour une List
    Par Samou2a dans le forum Taglibs
    Réponses: 2
    Dernier message: 10/12/2009, 10h54
  5. Utiliser la valeur d'une liste comme paramètre
    Par eudeline91 dans le forum IHM
    Réponses: 0
    Dernier message: 10/06/2008, 11h03

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