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

Développement SQL Server Discussion :

Mettre à jour un champ compteur


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 26
    Points : 16
    Points
    16
    Par défaut Mettre à jour un champ compteur
    Bonjour,

    J'ai une table contacts qui contient notamment les informations suivantes
    Civilite|Nom|Prenom|Num|CodeClient
    M.|Nom1|Prenom1|1|Client1
    Mme|Nom2|Prenom2|2|Client2
    ...

    Le champ Num est un compteur pour identification du contact.

    Nous sommes en train de refaire notre site Internet et nous allons laissé la possibilité au client de rajouter de nouveaux contacts.
    Je me retrouve donc avec des enregistrements avec num=0
    Civilite|Nom|Prenom|Num|CodeClient
    M.|Nom1|Prenom1|1|Client1
    Mme|Nom2|Prenom2|2|Client2
    Mme|Nom3|Prenom3|0|Client3
    Mme|Nom4|Prenom4|0|Client4


    J'aimerai avoir une requete qui me permette de mettre à jour le champ num avec la bonne information et donc d'avoir
    M.|Nom1|Prenom1|1|Client1
    Mme|Nom2|Prenom2|2|Client2
    Mme|Nom3|Prenom3|3|Client3
    Mme|Nom4|Prenom4|4|Client4

    J'ai vu des choses avec Fetch ou l'utilisation de la fonction WHile mais je bloque pour mettre à jour le champ Num en incrémentant la valeur.

    Merci par avance pour votre aide.

    Cdlt

    Pascal

  2. #2
    Membre chevronné Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut
    Pourquoi ne aps simplement utiliser une colonne de type IDENTITY ?
    Alexandre Chemla - Consultant MS BI chez Masao

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Je ne peux pas modifier la structure de la table contact car c'est une table lié à l'ERP. Si je change la structure, les mises à jour de l'ERP pourraient ne pas passer.
    Je pense que c'est fetch qu'il me faut mais j'ai toujours des soucis pour l'écriture de la requête.

  4. #4
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Pourquoi ne pas utiliser ROW_NUMBER() (si vous êtes au moins en sqlserver 2005) :

    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
    declare @contacts table
    (
     titre varchar(4),
     nom varchar(50),
     prenom varchar(50),
     num int null,
     codeclient varchar(50)
    );
     
    insert @contacts values 
    ('M.', 'Nom1', 'Prenom1', 1, 'Client1'),
    ('Mme', 'Nom2', 'Prenom2', 2, 'Client2'),
    ('Mme', 'Nom3', 'Prenom3', null, 'Client3'),
    ('Mme', 'Nom4', 'Prenom4', null, 'Client4')
     
    select 
     titre,
     nom,
     prenom,
     ROW_NUMBER() over (order by codeclient) AS num,
     codeclient
    from @contacts
    ++

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Désolé mais je suis en SQL Server 2000

  6. #6
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Avec 2000 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
     titre,
     nom,
     prenom,
     (SELECT COUNT(*) + 1 FROM @contacts AS T2
      WHERE T1.codeclient > T2.codeclient) AS num,
     codeclient
    FROM @contacts AS T1
    ++

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Merci pour ton aide mikedavem
    Ca fonctionne avec l'exemple mais si j'ai plusieurs contacts avec le même codeclient il ne m'incrémente pas le n°.
    Et quid de la mise à jour de ces infos dans la table.

    Après d'autres recherches j'ai procédé de la facon suivante.
    Je ne sais pas si c'est très académique mais ca fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Declare @num float(8)
    Declare @prenom varchar(50)
    Declare @nom varchar(50)
    Declare @codeclient varchar(50)
     
    While (SELECT count(*) FROM CONTACTS WHERE Num is Null)>0
    BEGIN
    	SELECT @num=Max(Num)+1 FROM CONTACTS
    	SELECT TOP 1 @prenom=Prenom, @nom=Nom, @codeclient=CodeClient  FROM CONTACTS WHERE (Num is Null)
    	UPDATE CONTACTS SET Num=@num where Prenom=@prenom and Nom=@nom and CodeClient=@codeclient
    END
    Votre avis m'intéresse avant de cloturer.

  8. #8
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Dans ce cas il faut ajouter un prédicat de plus dans la sous requête. Ici je suppose que 2 personnes ne peuvent pas avoir le même nom pour un contact donné mais vous pouvez changer cela en fonction de vos besoins.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 
     titre,
     nom,
     prenom,
     (SELECT COUNT(*) FROM @contacts AS T2
      WHERE T1.codeclient >= T2.codeclient
       AND T1.nom >= T2.nom) AS num,
     codeclient
    FROM @contacts AS T1
    ++

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

Discussions similaires

  1. Mettre à jour 1 champ avec un compteur
    Par Mvu dans le forum ASP
    Réponses: 2
    Dernier message: 18/12/2008, 23h09
  2. [Conception] Comment mettre à jour le champ "ID"
    Par WeDgEMasTeR dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 29/01/2006, 02h36
  3. Impossible de mettre à jour un champs
    Par _developpeur_ dans le forum Access
    Réponses: 4
    Dernier message: 23/01/2006, 13h17
  4. [Swing]Mettre à jour un champ d'un autre Jfame
    Par yoyothebest dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 14/09/2004, 13h39
  5. Réponses: 3
    Dernier message: 09/07/2004, 10h23

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