Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/04/2011, 09h18   #1
Membre à l'essai
 
Homme
Développeur informatique
Inscription : septembre 2008
Messages : 38
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : septembre 2008
Messages : 38
Points : 22
Points : 22
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 :
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 :
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.
helio500 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 10h39   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

Citation:
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 ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 10h44   #3
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 668
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 668
Points : 8 718
Points : 8 718
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 :
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 :
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)

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 10h11   #4
Membre à l'essai
 
Homme
Développeur informatique
Inscription : septembre 2008
Messages : 38
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : septembre 2008
Messages : 38
Points : 22
Points : 22
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.
helio500 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 15h14   #5
Membre à l'essai
 
Homme
Développeur informatique
Inscription : septembre 2008
Messages : 38
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : septembre 2008
Messages : 38
Points : 22
Points : 22
Je passe le topic à l'état "Résolu" car j'ai adapté le code de elsuket et cela fonctionne comme je souhaite. Encore merci.
helio500 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h11.


 
 
 
 
Partenaires

Hébergement Web