Identifiant sql server

Fermé
xspy - Modifié par xspy le 21/03/2011 à 09:45
productif Messages postés 39 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 9 février 2017 - 21 mars 2011 à 14:32
Bonjour,

Je galère depuis quelques jours concernant des identifiants de lignes sur SQL server.

Sur cette partie de ma base j'ai 2 tables :

- une table concernant des dossiers
- une table concernant des lignes de commandes associées à ces dossiers contenant en clé étrangère id_dossier

Je cherche à faire la chose suivante sans succès dans ma table des lignes :

id_dossier# id_ligne article

1 10.000 crayon bleu
1 20.000 crayon rouge
2 10.000 crayon bleu


Le but étant pour chaque numéro de dossier, que le numéro de ligne commence a 10.000 et s'incrémente automatiquement de 10.000 pour chaque nouvelle ligne mais il ne doit pas être unique, c'est la combinaison id_dossier + id_ligne qui doit l'être. L'id ligne doit repartir a 10.000 pour chaque première ligne d'un nouveau dossier.


Avez-vous une solution ? j'imagine que ce n'est pas très compliqué mais je ne trouve aucun cas similaire malgré plusieurs heures de recherche sur Google...


Merci par avance
A voir également:

2 réponses

productif Messages postés 39 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 9 février 2017 20
21 mars 2011 à 11:38
Pour commencer, si on en savait un peu plus sur la raison de vouloir ce fonctionnement à "10 000", ça m'aiderait peut-être à répondre.

Ensuite il faut bien se rappeler qu'un identifiant auto-généré est généralement une valeur technique complètement abstraite et dé-corrélée de la signification de la ligne dans la table. En ce sens, cette valeur ne sert qu'à effectuer des recherches et des jointures, pas à représenter une caractéristique de la ligne.

Je proposerais plutôt de créer une colonne supplémentaire "code_ligne" qui, elle, pourrait être renseignée par un processus annexe (une procédure appelée à certains moments, un trigger) avec les valeur attendues en "10 000".

Je ne connais pas tous les détails de fonctionnement cette base, mais je pense que c'est excessivement compliqué de vouloir mettre en oeuvre cette règle de "10 000" dans un générateur d'identifiants.
0
En réalité, ma base est une base annexe à Dynamics NAV (ERP).

J'ai un programme dans lequel je gère des commandes spécifiques, lignes qui seront injectées dans des tables de mon ERP spécialement créées pour ce traitement. Le problème est que mon ERP gère les numéro de lignes de commandes de 10.000 en 10.000 et en cas d'ajout d'une ligne intermédiaire son numéro sera 5000 (il divise l'espace en deux) et que si ce numéro ne se remet pas a 10.000 pour chaque commande, nous ne pourrons gérer que 2^36/10.000 (propiété de l'ERP) lignes de commandes ce qui est peu.

Je ne pense pas que savoir cela t'avances plus... je veux uniquement et clairement avoir un identifiant double en gros ! un numero de commande pour ma jointure avec ma table des enttes de commande et un numero de ligne de 10.000 en 10.000 repartant à 10.000 pour toute nouvelle commande.
0
productif Messages postés 39 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 9 février 2017 20
21 mars 2011 à 14:32
Si je comprends bien, ce numéro de ligne n'est pas une contrainte de ta base, mais une contrainte de l'ERP en aval. Dans ce cas, utilise un générateur d'identifiant classique pour la table des lignes, id_ligne. Ensuite, définit une colonne supplémentaire code_ligne qui pourrait être nulle dans un premier temps.

Le remplissage de code_ligne se ferait par une procédure stockée appelée juste avant l'injection dans l'ERP. A moins que le nombre de lignes ne soit très important, cela pourrait probablement se faire simplement avec un curseur.
0