Précédent   Forum du club des développeurs et IT Pro > Bases de données > Décisions SGBD > Optimisations
Optimisations Forum de conseils pour les optimisations des performances SGBD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 01/06/2011, 16h10   #1
mikaeru
Membre du Club
 
Inscription : novembre 2007
Messages : 115
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : novembre 2007
Messages : 115
Points : 57
Points : 57
Par défaut Plusieurs potentiels prénoms

Bonjour,

On est sur un service où on doit stocker les noms et tous les prénoms de nos clients.
Nos développeurs fournissent ce genre de table

ID (int)
Nom (varchar 50)
Prenom_1 (varchar 50)
Prenom_2(varchar 50)
Prenom_3(varchar 50)
Prenom_4(varchar 50)
Prenom_5(varchar 50)

En sachant qu'on a tous un prénom et que +- 70% des personnes ont un 2ème prénom et que moins de 50% ont un 3ème prénom, et je ne parle même pas des 4ème et 5ème prénom.

Je penserai plus vers une structure à 2 tables comme ça:

Client
ID (INT)
Nom (varchar 50)
Prenom (varchar 50)

Client_prénom
ID (int)
Prénom (varchar 50)
Ordre (varchar 50)

Selon vous, quelle serait la meilleure solution ?

Merci.

ps: on tourne sur MSSQL 2008 R2
mikaeru est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/06/2011, 16h26   #2
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 659
Points : 25 562
Points : 25 562
Envoyer un message via MSN à CinePhil
Effectivement, la seconde structure est meilleure. Et quitte à séparer les prénoms, autant séparer aussi le premier prénom !
Surtout que tes clients ne sont (ou ne seront) peut-être pas tous des personnes physiques avec prénom mais aussi des personnes morales sans prénom !

Au fait, ça existe des prénoms de 50 caractères ? Un VARCHAR(30) ne serait-il pas suffisant ?

Quant à l'ordre, un TINYINT serait plus approprié !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/06/2011, 19h17   #3
SQLpro
Rédacteur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 12 099
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 12 099
Points : 21 728
Points : 21 728
Citation:
Envoyé par mikaeru Voir le message
Bonjour,

On est sur un service où on doit stocker les noms et tous les prénoms de nos clients.
Nos développeurs fournissent ce genre de table

ID (int)
Nom (varchar 50)
Prenom_1 (varchar 50)
Prenom_2(varchar 50)
Prenom_3(varchar 50)
Prenom_4(varchar 50)
Prenom_5(varchar 50)

En sachant qu'on a tous un prénom et que +- 70% des personnes ont un 2ème prénom et que moins de 50% ont un 3ème prénom, et je ne parle même pas des 4ème et 5ème prénom.

Je penserai plus vers une structure à 2 tables comme ça:

Client
ID (INT)
Nom (varchar 50)
Prenom (varchar 50)

Client_prénom
ID (int)
Prénom (varchar 50)
Ordre (varchar 50)

Selon vous, quelle serait la meilleure solution ?

Merci.

ps: on tourne sur MSSQL 2008 R2
Ni l'une ni l'autre....

En effet vous aurez de la redondance !

la solution je l'ai donné dans le modèle ici :
http://blog.developpez.com/exercices...-de-personnes/

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/06/2011, 08h10   #4
mikaeru
Membre du Club
 
Inscription : novembre 2007
Messages : 115
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : novembre 2007
Messages : 115
Points : 57
Points : 57
Bonjour,
Merci pour votre réponse.
En effet, du tinyint est plus approprié pour l'ordre, petite erreur de clavier

Sinon cette table ne s’occupera que de personne physique, et que le 1er prénom sera souvent affiché.

Et merci pour le lien, je lirai en cours de journée, car bien que cela me sera utile, et que j'en suis reconnaissant, mais ce qui y est décrit dépasse « un peu » mes besoins.

Si on parle du coté logique de la chose j’opterai directement pour une table à part, mais entre les best practice et ce qui est optimal il y a souvent une marge en READ et WRITE.

Sinon qu’elle serait selon vous de bon argument pour favorisé la table ‘prénom’

+
Normalisation
Espace gagné


-
Un chouia plus compliqué pour les inserts
Prise de tête avec les développeurs pour leur faire changer d’avis (^^)


Encore merci pour votre temps
mikaeru est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/06/2011, 11h04   #5
SQLpro
Rédacteur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 12 099
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 12 099
Points : 21 728
Points : 21 728
Il n'y a que des avantages et aucun inconvénient à utiliser ce modèle, tant sur le plan de la facilité de requêtage que sur les performances.

mais pour le comprendre, il faut implémenter le MED (Modèle Externe de Données) c'est à dire les vues, ce qu'hélas peu de développeurs font.

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/06/2011, 11h06   #6
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 659
Points : 25 562
Points : 25 562
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par SQLpro Voir le message
il faut implémenter le MED (Modèle Externe de Données)
Tout comme il y a le Modèle Organisationnel des Traitements (MOT), ne dit-on pas plutôt Modèle Organisationnel des Données (MOD) en méthode Merise ?

Et pendant que j'y suis :
Citation:
Prise de tête avec les développeurs pour leur faire changer d’avis (^^)
Ce n'est pas au développeur de l'application d'imposer la structure de la base de données !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/06/2011, 11h33   #7
mikaeru
Membre du Club
 
Inscription : novembre 2007
Messages : 115
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : novembre 2007
Messages : 115
Points : 57
Points : 57
Citation:
Envoyé par CinePhil Voir le message
Ce n'est pas au développeur de l'application d'imposer la structure de la base de données !
^^, je sais mais je suis arrivé en cours de projets donc je doit défaire une partie qui est déjà faite.
Maintenant autre question bête.

Pour faire un select (ou crée là vue)
je ferai :
Code :
1
2
3
4
SELECT nom, prénom 
FROM t_nom n 
JOIN t_prenom p ON n.id=p.id_n 
ORDER BY [ordre]
et les dévlopeurs s'amuse a gérer les prénoms

ou je créerai une requete du genre

Code :
1
2
SELECT nom, (sub SELECT ) prenom_1 ,(sub SELECT ) prenom_2 ,....
FROM t_nom n
Merci encore pour vos lumières.
mikaeru est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/06/2011, 13h34   #8
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 659
Points : 25 562
Points : 25 562
Envoyer un message via MSN à CinePhil
Tu crées une vue avec la première requête. Enfin mieux adaptée à ton cas réel.

La présentation des données avec un prénom par colonne ou à la suite séparés par des virgules est du ressort de l'application donc du développeur.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/06/2011, 13h47   #9
mikaeru
Membre du Club
 
Inscription : novembre 2007
Messages : 115
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : novembre 2007
Messages : 115
Points : 57
Points : 57
Mais dans le cas on la query retourne + de 10 collones
on aurait quelque chose comme


Dupont[]Marc[/][]Col1[/][]col2[/]...
Dupont[]Mika[/][]Col1[/][]col2[/]...
Dupont[]Luc[/][]Col1[/][]col2[/]...
Dupont[]Pierre[/][]Col1[/][]col2[/]...



Est ce vraiment plus performant ?, Désolé d'être aussi pointilleux
Et encore un grand merci
mikaeru est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/06/2011, 17h52   #10
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 659
Points : 25 562
Points : 25 562
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par mikaeru Voir le message
Mais dans le cas on la query retourne + de 10 collones
Pas 10 colonnes mais 10 lignes si la personne a 10 prénoms et seulement 3 lignes si la personne n'a que 3 prénoms.

Et pour un programmeur digne de ce nom, c'est un processus très classique de parcourir un jeu de résultat et de gérer la rupture sur le nom afin de rassembler tous les prénoms d'un nom.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/06/2011, 09h19   #11
mikaeru
Membre du Club
 
Inscription : novembre 2007
Messages : 115
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : novembre 2007
Messages : 115
Points : 57
Points : 57
Citation:
Envoyé par CinePhil Voir le message
Pas 10 colonnes mais 10 lignes si la personne a 10 prénoms et seulement 3 lignes si la personne n'a que 3 prénoms.

Et pour un programmeur digne de ce nom, c'est un processus très classique de parcourir un jeu de résultat et de gérer la rupture sur le nom afin de rassembler tous les prénoms d'un nom.
Bonjour en ce jour nouveau

Dans mon cas ici, la table a actuellement 28 colonnes (je reviendrais sur ce problème dans un autre post ^^).

Donc en cas de multiple prénom ce qui m'inquiète ce ne sont pas les qualités du programmeur, car comme tu le souligne cela devrait être facile à gérer pour lui, mais plutôt les ressources utilisé.

Disons que chaque ligne fera +- 500 octets, dans le cas 4 prénoms (c’est mon cas ), est ce qu’il fera un read de 2000 octets ? Mais il y a aura bien un envoi de 2000 octets via le réseau.

Ce processe sera souvent utilisé donc potentiellement gourmant en ressource.

Encore Merci
mikaeru est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/06/2011, 13h54   #12
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 659
Points : 25 562
Points : 25 562
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par mikaeru Voir le message
Dans mon cas ici, la table a actuellement 28 colonnes
Mais est-il nécessaire de ramener les 28 colonnes à chaque fois qu'on a besoin de tous les prénoms du client ?
Dans les requêtes, il faut éviter la guerre des étoiles !

Citation:
(je reviendrais sur ce problème dans un autre post ^^).
Effectivement, 28 colonnes, ça commence à faire un peu beaucoup ; n'y aurait-il pas d'autres optimisations du modèle de données à faire ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/06/2011, 08h17   #13
mikaeru
Membre du Club
 
Inscription : novembre 2007
Messages : 115
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : novembre 2007
Messages : 115
Points : 57
Points : 57
Bonjour,
Merci pour l'intérêt que tu portes à mon post ^^.

Cela sera très loin d'un select *, mais l'interface aura besoin de au moins 15 de ces champs, cela restera de la déduplication de donné pour les 14 autres colonnes.

Ma question est :
Est-ce que cela est il préférable à ceci :

Code :
1
2
SELECT nom, (sub SELECT ) prenom_1 ,(sub SELECT ) prenom_2 ,....
FROM t_nom n
Pour les 28 colonnes, je vais créer mon post tout de suite ^^.

Merci
mikaeru est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 08h30   #14
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 659
Points : 25 562
Points : 25 562
Envoyer un message via MSN à CinePhil
La jointure et le traitement d'affichage des données par le programme sera probablement plus rapide que les requêtes SELECT ; ça fait toujours pusieurs requêtes à exécuter par le SGBD plutôt qu'une seule !

Quel volume de données (combien de lignes de résultat de la requête) sera à traiter par le programme ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 09h00   #15
mikaeru
Membre du Club
 
Inscription : novembre 2007
Messages : 115
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : novembre 2007
Messages : 115
Points : 57
Points : 57
+- 300 000 rows (+-300 octects chaque ligne)
mikaeru est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 09h56   #16
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 659
Points : 25 562
Points : 25 562
Envoyer un message via MSN à CinePhil
Pour quel besoin le programme devrait-il traiter autant de noms en même temps ?
J'imagine qu'il ne s'agit pas d'afficher d'un coup les 300 000 lignes ?

300 000 lignes c'est tout petit pour un SGBD mais ça commence à être sensible pour un programme. Tout dépend du traitement qui est fait par ce programme sur le jeu de données.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2011, 19h28   #17
SQLpro
Rédacteur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 12 099
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 12 099
Points : 21 728
Points : 21 728
Dans le cadre de la solution que je vous ais déjà donné :
http://blog.developpez.com/exercices...-de-personnes/
Nous avons implémenté une vue avec les données de la personne et deux colonnes calculées par une même UDF :
PRENOM_USUEL
AUTRES_PRENOM
La première contient le prénom usuel et s'il est composé le recompose.
La seconde contient la liste de toutes les autres prénoms, séparé par des virgules et pour les prénoms composés, par un tiret.
Voici le code de l'UDF (SQL Server) qui fait cela :
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
38
39
40
41
42
43
44
--==========================================================================--
-- Fonction scalaires de mise à plat de tous les prénoms d'une personne 
--==========================================================================--             
CREATE FUNCTION S_PRS.F_LISTE_PRENOMS (@PRS_ID INT, 
                                       @USUEL  BIT)
RETURNS VARCHAR(max)
AS
/****************************************************************************** 
* Fonction scalaire récupérant tous les prénoms d'une personne                *
******************************************************************************* 
* Fred. Brouard - http://sqlpro.developpez.com - www.sqlspot.com - 2009-04-20 * 
*******************************************************************************
* @PRS_ID id de la personne physique                                          *
* @USUEL : Si 1 prénom usuels selement                                        *
*          Si 0 autres prénoms                                                *
*          Si NULL tous les prénoms, l'usuel en premier                       *
******************************************************************************/ 
BEGIN
   DECLARE @PRENOMS VARCHAR(max);
   SET @PRENOMS = '';
-- concaténation des prénoms   
   SELECT /* 37E203D2-440F-4567-A81E-A17BF9BBE24E */
          @PRENOMS = @PRENOMS + PRN_LIBELLE 
          + CASE PPN_COMPOSE WHEN 1 THEN '-' ELSE ', ' END
   FROM   S_PRS.T_J_PRS_PRENOMMEE_PRN_PPN AS PPN
          INNER JOIN S_REF.T_R_PRENOM_PRN AS PRN
                ON PPN.PRN_ID = PRN.PRN_ID
   WHERE  PPN_USUEL = COALESCE(@USUEL, PPN_USUEL)
     AND  PPN.PRS_ID = @PRS_ID
   ORDER  BY PPN_USUEL DESC, PPN_ORDRE;
-- si plus de 128 caractères
   IF LEN(@PRENOMS) > 128
   BEGIN
      SET @PRENOMS = SUBSTRING(@PRENOMS, 1, 128);
      SET @PRENOMS = SUBSTRING(@PRENOMS, 1, LEN(@PRENOMS) - CHARINDEX(REVERSE(@PRENOMS), ' '));
   END
-- suppression du caractère virgule finale
   SET @PRENOMS = CASE 
                     WHEN @PRENOMS = '' THEN NULL 
                     ELSE SUBSTRING(@PRENOMS, 1, LEN(@PRENOMS) - 1) 
                  END;
   RETURN @PRENOMS;
END
GO
Bien entendu, nous avons les fonctions inverses pour les masques de saisie. Elle sont inspirée par ll'UDF suivante :
http://blog.developpez.com/sqlpro/p7...sure-multiple/

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 08h34   #18
mikaeru
Membre du Club
 
Inscription : novembre 2007
Messages : 115
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : novembre 2007
Messages : 115
Points : 57
Points : 57
Bonjour,
Merci pour vos réponses.
mikaeru est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h44.


 
 
 
 
Partenaires

Hébergement Web