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 :

Auto increment spécifique


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 53
    Par défaut Auto increment spécifique
    Bonjour à tous,

    Je viens vous demander un peu d'aide sur un petit problème :

    J'ai en fait deux tables dans ma base SQL Server, et deux champs me posent un souci, un idDomaine dans ma table Domaine et un idRisque dans la table Risque.
    J'aimerais faire en sorte que lorsqu'un nouvel idDomaine est crée dans ma base (sous-entendu l'utilisateur l'a crée à travers l'application) mon idRisque recommence son incrémentation à 1.
    J'ai regardé dans SQL Server,mais je ne sais pas si je dois passer directement en ligne de code pour l'indiquer à la base ou si cela se fait à travers SQL Server. Dans la logique, l'incrémentation continue mais ne recommence pas à 1, j'aimerais savoir si cela est possible avec une condition comme la mienne.


    Merci d'avance

    PS: pour faire simple, un domaine peut contenir plusieurs risques d'où le renouvellement de l'incrémentation.

  2. #2
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2011
    Messages : 70
    Par défaut
    Bonjour,

    Je présume donc que dans ta table Risque, tu as un champ pour faire la liaison avec ta table Domaine.

    Personnelement, je fairais une jointure gauche depuis la table domaine sur la table risque (si je suis pas clair :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM domaine AS D LEFT OUTER JOIN risque AS R ON D.idDomaine = R.id_domaine
    (à voir en fonction de tes noms de champ)

    pour récuperer l'identifiant maximum correspondant. Vu que un risque correspond à un seul domaine, et qu'un domaine peut avoir plusieurs risques.

    Ainsi, en précisant l'id_domaine dans la clause where, tu obtiendra tous les risques correspondant au domaine. Avec un MAX(id_domaine) dans le select, tu prend le plus élevé. Il te suffit d'incrémenter cette valeur et de tant servir pour insérer la nouvelle ligne. (Bien sur, si le select ne retourne aucune ligne, la valeur sera 1)

    EDIT : Ton champ de peut pas être auto incrémenté directement dans la base par conséquent, et ne peux pas être une clé primaire vu que des nombres se répetent

    Cela pourrait donner une requête du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT MAX(R.id_risque) 
    FROM domaine AS D LEFT OUTER JOIN risque AS R ON D.idDomaine = R.id_domaine
    WHERE D.idDomaine = 'laValeurDuDomaine'
    Cela te parrait clair?
    Après, il y a peut être des méthodes plus simple, mais personnelement je ferai comme ça :p

  3. #3
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Pourquoi ne pas poser la question dans le forum SQL Server ?

    Ca peut se faire avec un trigger par exemple.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 53
    Par défaut
    Merci pour vos réponses, mais j'ai oublié de préciser que je dispose de Subsonic donc je ne fais pas de requête SQL directement dans mon code

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 53
    Par défaut
    Citation Envoyé par Galerio Voir le message
    Yop,
    Ma première intérrogation en te lisant est la suivante : IdRisque correspond-il a ta clé primaire de ta table risque?
    Si oui, c'est tout bonnement impossible dans un sgbdr (deux clés ne peuvent être identique). Ne connaissant pas ton niveau en base de donnée relationnel, je préfère le rappeler.

    Sinon, ce que tu souhaite est techniquement proche d'un compteur. Je ne sais pas quelle sgbdr tu utilise, mais certiains proposent l'attribut "AutoIncrement" pour ce genre de choses,
    auquel tu colles une valeur initiale à "1" au moment du premier enregistrement.
    Je te déconseille de faire un count() car tu te retrouveraient avec des problématique de doublons (et oui si tu supprimes des risques, le count() diminue).

    Oui c'est ma clé primaire idRisque, cependant j'ai crée idRisqueAffiche, cela facilite la manipulation

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Par défaut
    Hop et voilà un truc qui te sauvera : l'attribut 'identity'

    http://blog.developpez.com/sqlpro/p6...ec-sql-server/

  7. #7
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Nikko42 Voir le message
    Merci pour vos réponses, mais j'ai oublié de préciser que je dispose de Subsonic donc je ne fais pas de requête SQL directement dans mon code
    Cela confirme donc ce que je dis : un trigger fera parfaitement l'affaire pour calculer un nouveau IDRisque lors de l'insertion de la ligne.

    Sinon, comme l'indique Galerio, une clé doit être unique.

    Donc d'après ta règle, IDRisque ne peut en aucun cas constituer une clé primaire à lui seul.

    En revanche, couplé à IDDomaine sous forme d'une clé composée cela peut parfaitement constituer une clé primaire (ceci dit, il vaut mieux, surtout sous SQL Server, opter pour une clé primaire mono-colonne, et faire de ce tuple une clé alternative).

  8. #8
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 53
    Par défaut
    Merci pour vos réponses, cependant, avant ça j'ai un autre problème tout bête mais j'y suis depuis quelques temps:

    J'ai donc une liste déroulante qui affiche tous mes domaines, et une seconde dans laquelle les risques correspondant aux domaines devraient apparaître, c'est a dire que je dois pouvoir sélectionner mon domaine et tous ses risques correspondant à partir du numéro 1 dans la liste suivante.

    Mais, je ne vois pas comment faire, car lorsque j'affiche un domaine, et que dans ma colonne idRisqueAffiche j'insère par exemple le numéro 1 pour chaque idDomaine, cela ne prend en compte que l'idDomaine correspondant, donc dans mon idDomaine numéro 1, je vais avoir "1,1,1" dans ma liste déroulante et rien pour les domaines suivants.

    J'espère avoir été clair

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Par défaut
    Yop,
    Ma première intérrogation en te lisant est la suivante : IdRisque correspond-il a ta clé primaire de ta table risque?
    Si oui, c'est tout bonnement impossible dans un sgbdr (deux clés ne peuvent être identique). Ne connaissant pas ton niveau en base de donnée relationnel, je préfère le rappeler.

    Sinon, ce que tu souhaite est techniquement proche d'un compteur. Je ne sais pas quelle sgbdr tu utilise, mais certiains proposent l'attribut "AutoIncrement" pour ce genre de choses,
    auquel tu colles une valeur initiale à "1" au moment du premier enregistrement.
    Je te déconseille de faire un count() car tu te retrouveraient avec des problématique de doublons (et oui si tu supprimes des risques, le count() diminue).

Discussions similaires

  1. auto-increment
    Par fafet dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/07/2003, 15h05
  2. [MYSQL] valeur auto-increment
    Par alex1er dans le forum Requêtes
    Réponses: 5
    Dernier message: 10/07/2003, 12h26
  3. Auto Increment
    Par Guizz dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/06/2003, 18h36
  4. Nom du champs auto-incrementé
    Par norroy dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/06/2003, 18h30
  5. Pb d'auto-incrément sur une table v7
    Par Nivux dans le forum Paradox
    Réponses: 9
    Dernier message: 26/12/2002, 12h05

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