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 :

Procédure passer une liste en paramètre


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 221
    Points : 88
    Points
    88
    Par défaut Procédure passer une liste en paramètre
    Bonjour

    J'ai fait une procédure stocké et je voudrais lui passer en paramètre une liste de code utilisateur.
    Cette procédure fonctionne bien si je passe un code mais pas avec une liste

    Voilà comment j'ai procédé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ALTER PROCEDURE [dbo].[ma_procedure]
    	-- Add the parameters for the stored procedure here
    	@listeCodeUtilisateur nvarchar(max),
    	@dateDebut datetime,
    	@dateFin datetime
     
                 -- J'ai essayé en mettant des quotes mais ça ne fonctionne pas
    	--SET @listeCodeUtilisateur =  '''' + REPLACE(@listeCodeUtilisateur, ',', ''',''') + ''''
    	--Print @listeCodeUtilisateur
     
    	DECLARE curseur_utilisateur CURSOR FOR
    	SELECT USR_0 from UTILISATEUR
    	WHERE USR_0 in (@listeCodeUtilisateur)
    Ma requête ne ramène rien

    Merci à vous

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    En effet ça ne fonctionne pas, car vous demandez les utilisateur donc l'ID est contenu dans une liste, mais la liste en question contient un seul élément :
    "1,2,56,12"
    Le moteur cherche donc si ID = "1,2,56,12", et n'en trouve aucun.

    Si vous voulez rester sur une chaine d'ID séparés par des virgules, vous devrez soit parser cette chaine pour extraire les ID, soit générer une requête à la volée et l’exécuter.

    Personnellement, je préfère dans ce cas envoyer la liste en XML

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Vous pourriez utiliser un query dynamique.
    Vous pourriez utiliser une CTE récursive pour transformer par exemple "1,2,3" en une table de 3 lignes (1),(2),(3) et l'employer dans une jointure.
    Vous pourriez utiliser une table temporaire pour "communiquer" une série de code utilisateurs.
    Vous pourriez utiliser ma méthode préférée* pour 2005 : créer une vue avec trigger instead of voir ici.
    Qui donnerait des appels de ce genre :
    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
     
    INSERT INTO dbo.v_ma_procedure (
     CodeUtilisateur
     , dateDebut
     , dateFin
    )
    SELECT
     CodeUtilisateur
     , '2013-01-01'
     , '2013-03-22'
    FROM (
     SELECT 8
     UNION ALL SELECT 13
     UNION ALL SELECT 52
     UNION ALL SELECT 78
    ) AS Src (CodeUtilisateur)

    * inventée moi-même.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    l'idéal selon moi reste l'utilisation des TVP http://msdn.microsoft.com/en-us/library/bb510489.aspx

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Citation Envoyé par darkelend Voir le message
    l'idéal selon moi reste l'utilisation des TVP http://msdn.microsoft.com/en-us/library/bb510489.aspx
    Pas en 2005

Discussions similaires

  1. [MySQL-5.6] [PS] Passer une liste en paramètre
    Par mysqlnoob dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 28/01/2014, 23h47
  2. Réponses: 1
    Dernier message: 03/04/2013, 15h45
  3. Méthode avec un paramètre de type "object" : comment lui passer une List ?
    Par Picsonald dans le forum Windows Communication Foundation
    Réponses: 22
    Dernier message: 19/03/2012, 11h16
  4. Réponses: 2
    Dernier message: 08/09/2006, 10h00

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