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 :

Envoi de liste en paramètre d'une procstock


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut Envoi de liste en paramètre d'une procstock
    Bonjour à tous.

    Je sèche sur un point particulier pour deux paramettres d'une proc stock.

    J'ai besoins d'envoyer des listes d'arguments.
    Le premier est une liste de chiffres et il me prend pas la conversion.
    Le deuxième est une liste de GUID et il ne me prends que le premier et pas la suite.

    Voici ce que j'ai fais pour l'instant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DECLARE @SecteurNews VARCHAR(3), @LangueNews VARCHAR(3), @UserNews VARCHAR(5000), @CategorieNews VARCHAR(1000)
    SET @SecteurNews = 'bil'
    SET @LangueNews = 'ang'
    SET @UserNews = '764e0c37-76d6-476c-9ad7-05cd11b4c104'',''606df898-5018-4470-bf8a-11084bf8f2bb'',''2432cc9e-3a3c-4b7f-b8e2-1383924c93c7'',''ef6ce12d-4055-442c-958a-3d78b7100948'',''5c051789-7232-4db0-8058-66f64146b178'',''bfa6aea8-0adb-4064-8b60-bb1e2ef282f6'',''f4be17f9-cb07-4332-b41a-c708895f6446'',''60b90952-59bc-42f7-a452-e2fde8b2b516'
    SET @CategorieNews = '35,36,37,38,39,40,41,42,43,44'
     
    SELECT NA.IdNews, U.UserName, NA.TitreNews, NA.TexteNews, NA.ImageMicroVisu FROM dbo.CORE_NewsApproved NA 
    INNER JOIN aspnet_Users U ON U.UserId = NA.GuidUser WHERE NA.SecteurNews = @SecteurNews AND NA.LangueNews = @LangueNews
    AND NA.GuidUser IN (@UserNews) 
    AND NA.CategorieNews IN (@CategorieNews )
    Donc là, sur la variable @CategorieNews il me dit :
    Échec de la conversion de la valeur varchar '35,36,37,38,39,40,41,42,43,44' en type de données int.
    Et pour l'autre, je vois bien qu'il ne prends en compte que le premier GUID.

    N'étant pas très doué en programmation SQL, je ne sais pas trop quoi faire sur ce coup là.

    Pouvez m'aider ?

    Merci d'avance.

  2. #2
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    Faites du SQL dynamique :
    Placer la requête dans une chaîne et exécuter une fois la chaîne construite à l'aide de sp_executesql
    Etienne ZINZINDOHOUE
    Billets-Articles

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci pour ton aide.
    J'y pensé mais cela ne plombe t il pas les performances ?

    Ou alors il n'y a aucune autre solution ?
    Mais surtout, je ne vois pas trop comment je peux envoyer ma liste de GUID, je n'arrive pas gérer les virgules.

  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
    Vous pouvez créer des types tables, déclarer ces types tables en variables et les passer en argument de vos proc.

    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 expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    heu merci pour el coup de main, mais là, c'est trop haut niveau pour mes petits neurones d'un seul coup.

    Des types table ? C'est quoi ?
    Aurais tu un lien vers un tuto, ou un exemple de code ?

    Merci.

  6. #6
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    http://www.mssqltips.com/sqlserverti...l-server-2008/

    attention les types table ne sont présent que depuis la version 2008 de SQL SERVER (vous n'avez pas précisé la version que vous utilisez...).

    Passez vous par du .net pour lancer vos requètes?
    Si oui sachez que les TVP (Table Valued Parameters) ne sont pas supporté par LINQ TO SQL et LINQ to entities.

    Vous devez repasser par du ADO.net "classique" (Sysem.Data.SqlClient....)

  7. #7
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci iberzerk pour tous ces détails interressant.
    Alors j'utilise un SQL server 2008 Express et je programme mon site en .NET, option VB. Mais je n'utilise pas de LINQ. Par contre j'envoi des SQLParameter pour lancer mes requêtes. Je suis en ADO.NET avec un outil perso pour envoyer mes requêtes. Je crois que j'ai mis ce truc dans mon blog sur ce site, si ça te tente, va voir. ça fais longtemps que j'ai pas posté de chose dans mon blog, mais j'ai mis des trucs interressants, enfin, je crois que c'est interressant.

    Maintenant, je vais voir ton lien et tenter de régler le problème.

    Merci

  8. #8
    Membre actif
    Homme Profil pro
    R&D
    Inscrit en
    Avril 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : R&D

    Informations forums :
    Inscription : Avril 2004
    Messages : 127
    Par défaut
    zooffy,

    Tu peux utiliser XML pour passer les listes puis les joindre aux tables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DECLARE @CategorieNews xml = '<r><v>35</v><v>36</v><v>37</v><v>38</v><v>39</v><v>40</v><v>41</v><v>42</v><v>43</v><v>44</v></r>';
    SELECT  x.v.value('.','int')
    FROM    @CategorieNews.nodes('/r/v') x(v)
    Dans ton cas (à vérifier le syntaxe)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT NA.IdNews, U.UserName, NA.TitreNews, NA.TexteNews, NA.ImageMicroVisu FROM dbo.CORE_NewsApproved NA 
    INNER JOIN aspnet_Users U ON U.UserId = NA.GuidUser 
    --
    INNER JOIN (
    SELECT  x.v.value('.','int') AS id
    FROM    @CategorieNews.nodes('/r/v') x(v)
    ) cn ON NA.CategorieNews = cn.id 
    --
    WHERE NA.SecteurNews = @SecteurNews AND NA.LangueNews = @LangueNews
    AND NA.GuidUser IN (@UserNews)

  9. #9
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Les DataTable, je maitrise pas trop et encore moins les types Table en SQL

    Je viens d'implémenter la version en XML, c'est tout simplement génial.
    J'ai juste une petite remaque du studio management sur le le x.v.value qui me dit que le nom doit être ambigu, mais le résultat est bon.

    Merci à tous pour votre aide.

    Je vous souhaite un excellent week-end.

  10. #10
    Membre actif
    Homme Profil pro
    R&D
    Inscrit en
    Avril 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : R&D

    Informations forums :
    Inscription : Avril 2004
    Messages : 127
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Je viens d'implémenter la version en XML, c'est tout simplement génial.
    C'est vrais, depuis 2005 la fonctionnalité XML est bien avancée en SQL Server.
    Il faut juste ne pas oublier que le traitement des gros documents XML (> plusieurs Mo) en variable de type xml charge le CPU et la mémoire.

    Mais pour les cas "normales" comme celui le cette approche est simple et efficace.

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

Discussions similaires

  1. Tri paramétré d'une zone de liste
    Par syldudu dans le forum IHM
    Réponses: 5
    Dernier message: 05/02/2007, 11h01
  2. Réponses: 2
    Dernier message: 08/09/2006, 09h00
  3. Réponses: 3
    Dernier message: 22/05/2006, 09h58
  4. Réponses: 3
    Dernier message: 15/03/2006, 03h19
  5. Comment obtenir la liste des paramètres d'une SP ?
    Par Le Gritche dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/03/2003, 16h54

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