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 :

liste d'id nvarchar dans IN ()


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 87
    Par défaut liste d'id nvarchar dans IN ()
    Bonjour,

    Par requête j'obtiens une liste d'Id dans ma variable @result
    select @result me retourne 6,10,51 ...

    puis dans une autre requête je fais :
    select * from toto where idTata in (@result)

    et là j'obtiens une erreur :
    Échec de la conversion de la valeur nvarchar '6, 10, 11, 84, 87, 220, 287, 478, 572, 573, 576, 620, 631, 632, 636, 1764, 3961, 3963, 3964, 4153, 4154, 4155, 4156, 4157, 4158, 4995, 4998, 16482' en type de données int.

    Comment puis convertir cette liste ?
    j'ai essayé avec convert sans succès !

  2. #2
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 87
    Par défaut
    C'est bon j'ai réussi !!!

  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,

    D'abord stocker un entier dans un nvarchar est bête pour deux raisons :

    - on stocke des entiers dans un type entier

    - nvarchar utilise Unicode, et donc 2 octets par caractère, pour stocker les chaînes de caractères contenant des littéraux provenant d'alphabets non-latins.
    Si vous aviez utilisé du varchar, vous n'occupez qu'un seul octet par caractère, puisqu'alors c'est ASCII qui est utilisé ...

    Par requête j'obtiens une liste d'Id dans ma variable @result
    Dans ce cas vous pouvez utiliser la requête qui peuple la variable de type table pour écrire une seule requête !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from toto where idTata in (@result)


    IN introduit une liste de valeurs, donc à la place de @result, vous auriez du écrire SELECT uneColonne FROM @result.

    L'écriture suivante est un peu plus élégante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT		T.*
    FROM		dbo.toto AS T
    INNER JOIN	@result AS R ON T.idTata = R.uneColonne
    Vous noterez au passage que pour une variable de type table, SQL Server estime toujours qu'elle ne contient qu’une seule ligne, ce qui conduit à la création de plan de requête contenant des défauts d'estimations de cardinalités fausses, et donc des requêtes longues ...

    Dès SQL Server 2005, vous pouvez écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ;WITH
    	CTE AS
    	(
    		-- requête pour peupler @result
    	)
    SELECT		T.*
    FROM		dbo.toto AS T
    INNER JOIN	CTE AS R ON T.idTata = R.uneColonne
    Ce qui vous évitera en plus d'avoir recours à la base de données système TempDB

    @++

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/07/2006, 20h14
  2. 2 listes deroulantes -> choix automatique dans la seconde
    Par desperado007 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 02/08/2005, 12h03
  3. Réponses: 3
    Dernier message: 25/07/2005, 14h58
  4. Réponses: 15
    Dernier message: 24/05/2005, 08h34
  5. Combo box et liste de valeurs contenues dans ma table
    Par TieumB dans le forum C++Builder
    Réponses: 14
    Dernier message: 05/04/2004, 18h47

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