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 :

[SQL server 2000] bout de requete passé en paramètre


Sujet :

MS SQL Server

  1. #1
    Membre averti Avatar de guignol
    Inscrit en
    Mai 2002
    Messages
    309
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 309
    Points : 339
    Points
    339
    Par défaut [SQL server 2000] bout de requete passé en paramètre
    Bonjour!

    Je travaille en aspx, et à la suite d'une sélection multiple, je veux récupérer toutes les valeurs correspondantes à ma sélection.

    Pour cela, j'ai créé une procédure stockée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE PROCEDURE [dbo].[ps_sel_CollabCompetences]
    @list_id_theme varchar(300)
     AS
    select * from sel_CollabCompetences, sel_NbCollabCompetences
    where sel_collabCompetences.libelle=sel_NbCollabCompetences.libelle
    and id_theme in (@list_id_theme)
    GO
    @list_id_theme a des valeurs sous cette forme : 1,2,3,4 et id_theme est de type numeric.

    A l'exécution j'obtient une erreur : Erreur de conversion du type de données varchar en numeric.
    en fait je voudrais que ma variable ne soit pas comparée directement, mais fasse plutot partie de la syntaxe de la requete, comme si on obtenait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     and id_theme in (1,2,3,4)
    J'espere que vous avez compris mon problème (j'ai un peu de mal à trouver les mots).

    merci d'avance

    charly
    - Fais une recherche, c'est un conseil. Si je me mets à t'aider, tu vas pas t'en sortir

    - "Même avec les yeux grands ouverts, je n'y vois rien".

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Il vous faut passer par du SQL dynamique pour ce genre de construction.

    Sinon, vous pouvez renseigner une table avec vos parametres et faire une jointure ensuite.
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    Membre averti Avatar de guignol
    Inscrit en
    Mai 2002
    Messages
    309
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 309
    Points : 339
    Points
    339
    Par défaut
    OK, mais que signifie SQL Dynamique? Cela veut-il dire que je dois construire mon instruction sql puis l'exécuter? et peut-on faire du sql dynamique dans une procédure stockée?

    Comment fait-on svp?

    Merci d'avance

    Charly
    - Fais une recherche, c'est un conseil. Si je me mets à t'aider, tu vas pas t'en sortir

    - "Même avec les yeux grands ouverts, je n'y vois rien".

  4. #4
    Membre averti Avatar de guignol
    Inscrit en
    Mai 2002
    Messages
    309
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 309
    Points : 339
    Points
    339
    Par défaut
    Ok c'est bon j'ai trouvé en fouillant un peu. Je crée ma requête en la mettant dans une variable et je l'exécute au sein de ma procédure stockée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE PROCEDURE [dbo].[ps_sel_CollabCompetences]
    @list_id_theme varchar(300)
     AS
    declare @sql as nvarchar(600)
    select @sql='select * from sel_CollabCompetences, sel_NbCollabCompetences where sel_collabCompetences.libelle=sel_NbCollabCompetences.libelle and id_theme in (' +@list_id_theme +')'
    exec sp_executeSQL  @sql
    GO
    Merci beacoup=>résolu :-D
    - Fais une recherche, c'est un conseil. Si je me mets à t'aider, tu vas pas t'en sortir

    - "Même avec les yeux grands ouverts, je n'y vois rien".

  5. #5
    Membre habitué Avatar de akecoocoo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2004
    Messages : 78
    Points : 146
    Points
    146
    Par défaut
    j'aimerai savoir si ce principe est 'securise'
    ne peut on pas remplacer la sequence '4,5,2' par une autre chaine de caracteres qui permetterait d'acceder a d'autres infos sur la base de donnees ?
    merci pour votre reponse

  6. #6
    Membre habitué Avatar de akecoocoo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2004
    Messages : 78
    Points : 146
    Points
    146
    Par défaut
    bon, apres avoir essaye la methode de guignol, j'ai juge bon de ne pas l'adopter... (problemes de securite evidents..)

    je suis tombe sur cette page : http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm

    qui resume le danger de ta methode guignol, pour ma part j'utilise la methode 2... ca allourdit le code et le temps d'execution, mais je crains moins les erreurs d'execution ainsi..

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

Discussions similaires

  1. [SQL Server 2000]Executer une requete contenue dans un champ
    Par hwoarang dans le forum Développement
    Réponses: 4
    Dernier message: 25/11/2009, 17h23
  2. [SQL Server 2000/Access 2003] Requête SQL à affiner
    Par Baldric de Dol dans le forum Langage SQL
    Réponses: 8
    Dernier message: 08/07/2006, 07h17
  3. [sql server 2000]aide pour une requete
    Par graphicsxp dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 22/05/2006, 18h24
  4. [SQL-SERVER 2000] Remplacer l'instruction GO dans requete
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/04/2006, 14h24
  5. Réponses: 1
    Dernier message: 19/09/2005, 13h56

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