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 :

Variable dans un In d'une procédure


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Formateur et développeur bureautique
    Inscrit en
    Mars 2007
    Messages
    1 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur et développeur bureautique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 583
    Par défaut [Résolu]Variable dans un In d'une procédure
    Bonjour à tous

    Après des mois de lectures attentivers des forums fournis, je me décide à poser une question, car je n'ai pas trouvé de réponse.

    Je voudrais mettre plusieurs valeurs dans une variable de ma procédure, car je ne recherche pas toujours la même quantité de valeurs.

    Ou autrement dit :
    Comment faire fonctionner 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
     
    ALTER       PROCEDURE sp_retrieve
    @variablekey			varchar,
    @entitykey			int
    AS
    BEGIN			
    	SELECT 
    		VariableKey, 
    		PeriodKey,
    		YTDValue
    	FROM 
    		Operational_Data
    	WHERE
    		EntityKey=@entitykey
    	and	VariableKey in (@variablekey)
    	Order by PeriodKey
    END
    Sachant que @variablekey peut contenir soit :
    '2'
    ou '2','3'
    ou '2','3','86' ...

    De plus ceci fonctionne parfaitement :
    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
     
    ALTER       PROCEDURE sp_retrieve
    @entitykey			int
    AS
    BEGIN			
    	SELECT 
    		VariableKey, 
    		PeriodKey,
    		YTDValue
    	FROM 
    		Operational_Data
    	WHERE
    		EntityKey=@entitykey
    	and	VariableKey in ('2','3')
    	Order by PeriodKey
    END
    Merci de m'aiguiller

    Pierre

  2. #2
    Membre expérimenté
    Inscrit en
    Février 2009
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 224
    Par défaut
    Bonjour,

    La fonction charindex doit pouvoir répondre à votre demande de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ... AND charindex(VariableKey,@variablekey)>0

  3. #3
    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 : 44
    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
    Par défaut
    Bonjour,

    Ceci ne fonctionne que si la colonne que si @variableKey est exactement une sous-chaîne de la colonne VariableKey.

    Essayez ceci, si vous êtes sous SQL Server 2005 ou 2008 :

    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
    ALTER PROCEDURE sp_retrieve
    	@variablekey VARCHAR,
    	@entitykey INT
    AS
    BEGIN
    	WITH
    		CTE_Indices AS (Deb, Fin) AS 
    		( 
    				SELECT 1 Deb, CHARINDEX(',', @variablekey + ',') Fin 
    			UNION ALL 
    				SELECT Fin + 1, CHARINDEX(',', @variablekey + ',', Fin + 1) 
    				FROM CTE 
    				WHERE CHARINDEX( ',', @variablekey + ',', Fin + 1 ) > 0 
    		),
    		CTE_VariableKeys (VariableKey) AS
    		(
    			SELECT SUBSTRING(@variablekey, Deb , Fin - Deb) VariableKey
    			FROM CTE_Indices
    		),
    	SELECT OD.VariableKey, 
    			OD.PeriodKey,
    			OD.YTDValue
    	FROM dbo.Operational_Data OD
    	JOIN CTE_VariableKeys VK ON VK.VariableKey = OD.VariableKey
    	WHERE OD.EntityKey = @entitykey
    	ORDER BY OD.PeriodKey
    END
    Pour d'autres exemples de CTE

    @++

  4. #4
    Membre Expert
    Homme Profil pro
    Formateur et développeur bureautique
    Inscrit en
    Mars 2007
    Messages
    1 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur et développeur bureautique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 583
    Par défaut
    Merci aussi de m'avoir répondu
    Citation Envoyé par elsuket Voir le message
    Ceci ne fonctionne que si la colonne que si @variableKey est exactement une sous-chaîne de la colonne VariableKey.

    Essayez ceci, si vous êtes sous SQL Server 2005 ou 2008 :
    [...]
    Mais les bases ne sont pas encore sous 2005 ou 2008

    Pierre

  5. #5
    Membre Expert
    Homme Profil pro
    Formateur et développeur bureautique
    Inscrit en
    Mars 2007
    Messages
    1 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur et développeur bureautique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 583
    Par défaut
    Bonjour
    Merci de m'avoir répondu
    Citation Envoyé par jero44 Voir le message
    La fonction charindex doit pouvoir répondre à votre demande de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ... AND charindex(VariableKey,@variablekey)>0
    mais mon champ VariableKey est un INT.
    J'avais déclaré ma variable @variablekey comme étant un varchar, car je pensai que c'est ce qu'il fallait faire.
    Donc cela ne fonctionne toujours pas.

    Je résume :
    • Mon champ (Variablekey) est un integer.
    • J'ai une variable (@variablekey) de ma procédure qui peut prendre de une à plusieurs valeurs.
    Comme écrire mon code pour que cela fonctionne ?

  6. #6
    Membre Expert
    Homme Profil pro
    Formateur et développeur bureautique
    Inscrit en
    Mars 2007
    Messages
    1 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur et développeur bureautique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 583
    Par défaut
    Bonjour
    J'ai finalement trouvé la solution en suivant cette adresse :
    http://vyaskn.tripod.com/passing_arr...procedures.htm
    Ce qui donne pour mon code :

    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
    ALTER       PROCEDURE sp_retrieve
    (
    @variablekey			varchar(100),
    @entitykey			varchar(10)
    )
    AS
    BEGIN
    	SET NOCOUNT ON
     
    	DECLARE @SQL varchar(600)
     
    	SET @SQL = '
    	SELECT 
    		VariableKey, 
    		PeriodKey,
    		YTDValue
    	FROM 
    		Operational_Data
    	WHERE
    		EntityKey=' + @entitykey +'
    	and	VariableKey in (' + @variablekey + ')'
    	Order by PeriodKey
    END
    Bonne fin de journée

    Pierre

Discussions similaires

  1. Copier une valeur dans un champs depuis une procédure
    Par zinabd dans le forum Designer
    Réponses: 8
    Dernier message: 20/11/2008, 09h31
  2. [Tableaux] variable dans la source d'une image
    Par theotaki dans le forum Langage
    Réponses: 3
    Dernier message: 12/04/2007, 23h33
  3. Réponses: 13
    Dernier message: 08/03/2007, 14h53
  4. Réponses: 13
    Dernier message: 11/01/2007, 15h39
  5. Réponses: 9
    Dernier message: 05/07/2005, 08h37

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