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 :

Ordonnancement sur champ spécialisé


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 74
    Points
    74
    Par défaut Ordonnancement sur champ spécialisé
    Bonjour
    J'utilise SQL server 2005
    Je voudrais pouvoir stocker et restituer les positions auquelles ont été insérées des lignes dans une table, dans un devis comportant de très nombreux articles par exemple il est fastidieux de laisser à l'utilsateur la gestion de cet ordre par exemple sur un champ de numerotation ; la demande est que cela soit gérer automatiquement . Avec des SGBD comme Access ou Paradox j'ajoute un champ ORD a ma table et je gère comme ceci
    insertion à 1 quand nb ligne = 0
    insertion à n et augmentation de 1 de toutes les valeurs > n
    delete de n et decrementation de 1 de toutes les valeurs > n
    etc ..
    avec SQL server je peux faire cela dans des trigger, mais n'existe t'il pas un moyen plus simple plus intégré

  2. #2
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Il te suffit d'indiquer que le champs est un auto-incrément

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create table t_table
    (
      tab_id int not null identity(1,1),
      ...
      ...
    )
    go

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 74
    Points
    74
    Par défaut
    j'ai du encore mal m'exprimer, mais il s'agit de pouvoir placer
    par exemple le dernier enregistrement inséré le 100 par exemple; à la position
    50 et que cela puisse être restitué a l'application cliente cad grace à une requête avec un ORDER BY sur ce champ

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 850
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 850
    Points : 52 984
    Points
    52 984
    Billets dans le blog
    6
    Par défaut
    Inspirez vous de l'article que j'ai écrit à ce sujet en ajoutant à la table des clefs une colonne facture_id.
    A lire : http://sqlpro.developpez.com/cours/clefs/

    A +

  5. #5
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 74
    Points
    74
    Par défaut
    Non décidément ce n'est pas le problème, mes tables se présentent ainsi
    ce sont en fait des devis et leurs items dans la table suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE TABLE T_DEVPART_DPT (
    	DPT_ID bigint IDENTITY(1,1) NOT NULL PRMARY KEY,
    	DEV_ID bigint NOT NULL,
    	DPT_ORD int NOT NULL
    - mon champ DPT_ORD doit se réinitialiser à 1 à chaque devis
    - de nombreux utilsateurs ajoutent des lignes à cette table
    donc la clef DPT_ID auto inc augmente très vite, si un utilisateur revient
    une semaine après sur un devis il veut insérer une ligne prenant
    par ex la clef primaire 3500 avant celle qui a la clef primaire 1500,
    (tous est invisible pour lui bien sur) .Je ne vais quand même pas augmenter
    toutes les valeurs de clef > 1500 pour laisser la place à cette nouvelle ligne

    Donc ma question était quelle est la meilleure manière d'implémenter cela
    or la solution que j'ai présenté au début de ce fil cad ajout d'un champ nonclef primaire dont on maintien la séquence de nombre à jour pour chaque devis

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 850
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 850
    Points : 52 984
    Points
    52 984
    Billets dans le blog
    6
    Par défaut
    Commencez par bien lire l'article que j'ai écrit au lieu de vous buter...
    Utilisez DPT_ORD comme incrément réinitialisé à chaque nouvel DEV_ID.
    Autrement dit par rapport à l'article, la table des clefs doit contenir une colonne supplémentaire DEV_ID.

    A +

  7. #7
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 74
    Points
    74
    Par défaut
    Je reprend le fil un peu tard peut être...
    Je m'excuse auprès de SQLPro mais je n'avais pas fait le rapprochement dans mon contexte avec le "Facture_id" de sa première réponse. Donc oui avec une table de clef que j'utilse d'ailleurs sur d'autres tables avec la procedure stockée que vous donné; je peux stockée la dernière valeur de DPT_ORD utilisée par Devis. Ma question ne portait pas entièrement sur le stockage mais sur le maintien de la sequence continue, que je gère déja par des ordres SQL depuis l'application client,
    insertion à n = +1 sur de toutes les valeurs > n
    delete de n = - 1 sur toutes les valeurs < n
    Ajout en fin avec valeur max de n (que je ramène par un select max ...car j'ai un syteme qui bloque les modifications d'un devis à un seul utilsateur)

    Je peux me passer de l'action sur le delete et utiliser une colonne Row_number sur une vue (cad laisser les trous)
    Utiliser un float sur DPT_ORD et intialiser à valeur courante + valeur du précédant / 2
    ....

Discussions similaires

  1. Critères sur champ de type date
    Par blasco dans le forum Access
    Réponses: 2
    Dernier message: 29/10/2004, 09h48
  2. tri sur champ texte
    Par ridan dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/08/2004, 16h28
  3. Recherche sur champ calculé
    Par srvremi dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/07/2004, 14h04
  4. Fonction LEFT sur champ de type "text" : méthodes
    Par MatthieuQ dans le forum Langage SQL
    Réponses: 4
    Dernier message: 08/06/2004, 11h15
  5. tabulation sur champs de saisie
    Par xClyde dans le forum Flash
    Réponses: 2
    Dernier message: 25/09/2003, 16h49

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