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 :

Concaténation de champs dans SQL Server


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 78
    Points : 86
    Points
    86
    Par défaut Concaténation de champs dans SQL Server
    Bonjour à tous,

    J'ai un soucis pour que directement sous SQL Server je puisse concaténer 2 champs, plus précisément je voudrais compléter à un champ "libellé" un index

    au départ j'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ID	LIB
    1	Java
    2	C++
    3	Visual Basic
    4	PHP
    5	ASP
    et je voudrais lors de l'exécution d'une procédure stockée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    LIB
    1 - Visual Basic
    2 - C++
    3 - Java
    4 - ASP
    5 - PHP
    Le problème c'est que l'index est choisi en fonction du libellé, il ne s'incrémente pas automatiquement. Par exemple le champ Visual Basic a l'index "3" dans ma table mais je voudrais qu'il soit complété avec le chiffre "1".
    Si quelqu'un a une idée.
    Merci.

  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

    l'index est choisi en fonction du libellé
    De quelle manière ?
    Qu'est-ce qui permet d'indiquer que Visual Basic correspond à 1, et non pas 2, 3, 4 ou 10 ?
    avez vous une troisième colonne dans votre table de départ ?

    et si ce n'est pas indiscret, pourquoi voulez vous faire cela ?

  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 : 43
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Ceci est de la présentation, et devrait être fait côté applicatif.
    Si vous voulez concaténer comme vous le demandez (je suppose que c'est pour un rendu dans une application), je vous suggère plutôt de rajouter une colonne sequence de type entier, et d'ordonner le résultat suivant cette colonne.
    Dès lors si vous avez un nouveau langage, vous pouvez le mettre à la position que vous voulez dans la liste avec un simple UPDATE

    Je suppose que la colonne ID est de type entier et a la propriété d'auto-incrémentation.
    C'est une valeur purement technique, donc elle ne doit jamais être montrée à l'utilisateur.

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    CREATE TABLE programming_language
    (
    	ID tinyint NOT NULL IDENTITY CONSTRAINT PKprogramming_language PRIMARY KEY
    	, LIB varchar(32) NOT NULL CONSTRAINT UQprogramming_language UNIQUE
    )
     
    INSERT	dbo.programming_language (LIB) VALUES ('Java')
    INSERT	dbo.programming_language (LIB) VALUES ('C++')
    INSERT	dbo.programming_language (LIB) VALUES ('Visual Basic')
    INSERT	dbo.programming_language (LIB) VALUES ('PHP')
    INSERT	dbo.programming_language (LIB) VALUES ('ASP')
     
    ALTER TABLE dbo.programming_language
    ADD sequence tinyint
    GO
     
    UPDATE	dbo.programming_language
    SET	sequence = CASE LIB
    			WHEN 'Visual Basic' THEN 1
    			WHEN 'C++' THEN 2
    			WHEN 'Java' THEN 3
    			WHEN 'ASP' THEN 4
    			WHEN 'PHP' THEN 5
    		END
     
    SELECT	*
    FROM	dbo.programming_language
    ORDER	BY sequence
     
    ALTER TABLE dbo.programming_language
    ALTER COLUMN sequence tinyint NOT NULL
    GO
     
    -- Optionnel
    ALTER TABLE dbo.programming_language
    ADD CONSTRAINT UQprogramming_language__sequence UNIQUE (sequence)
    GO
    Maintenant je veux rajouter C# :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT	dbo.programming_language (LIB, sequence) VALUES ('C#', 6)
    GO
     
    SELECT	*
    FROM	dbo.programming_language
    ORDER	BY sequence
    Vous pouvez aller encore plus loin en créant des trigger INSTEAD OF INSERT, UPDATE et DELETE pour gérer le numéro de séquence à votre place, si vous faites une insertion avec un numéro de séquence qui existe déjà (pour ne pas violer la contrainte UQprogramming_language__sequence)

    @++

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 78
    Points : 86
    Points
    86
    Par défaut
    Merci de vos réponses,
    en fait j'ai effectivement oublié de préciser le plus important, en réalité c'est simplement que la personne à qui je réalise une application veut que dans son état cela soit trié comme il le souhaite et non par ordre alphabétique ou par l'index. Il m'a donné l'ordre qu'il voulait et moi je voulais rajouter ce que j'ai exposé dans le premier post pour faire ce tri.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 78
    Points : 86
    Points
    86
    Par défaut
    Je passe le topic à l'état "Résolu" car j'ai adapté le code de elsuket et cela fonctionne comme je souhaite. Encore merci.

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

Discussions similaires

  1. [Débutant] l ajout d'un champ auto_increment avec vb dans sql server 2008
    Par chouchachaimouta dans le forum VB.NET
    Réponses: 5
    Dernier message: 06/05/2012, 20h48
  2. requête sql : concaténation des champs dans tableau
    Par tvcinq dans le forum Requêtes
    Réponses: 1
    Dernier message: 17/09/2010, 08h59
  3. Réponses: 6
    Dernier message: 31/05/2007, 15h54
  4. Parametre d'un champ text dans sql server
    Par Arthis dans le forum ASP
    Réponses: 1
    Dernier message: 24/04/2006, 14h21
  5. Champ de type "Image" dans SQL Server
    Par Edouard Kaiser dans le forum ASP
    Réponses: 5
    Dernier message: 09/09/2005, 07h43

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