Insertion auatomatique de GUID sous sql serveur 2000

Résolu
Signaler
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
-
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
-
Salut tout le monde,

voila ne souhaitant plus utiliser les compteurs auto-incrementer pour mes primary key (car je souhaite pouvoir intégrer dans une même BDD les Bdds de différents site et donc pour éviter les pbs de synchronisation..), je voudrais utiliser les GUID (ou unique identifier)

Seulement voila les choses que j'ai vue disais qu'il fallait générer au niveau programme le guid et faire l'insert avec le guid générer.

Moi je souhaiterais une solution plus simple, cad que la BDD ce charge de générer le guid (comme elle le fait pour les compteurs autoincrementer), la chose est -elle possible ???

Merci pour vos lumieres...


Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."

4 réponses

Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
14
moui et non

cette méthode permettrait effectivement que cela fonctionne un temps...
mais il y arrivera forcement un jour ou le compteur d'un des sites arrivera au niveau du compteur d'un autre site...je pense notamanet à une gestion des mouvements de stocks qui est enormenent solicite de maniere journaliere...

et la c la cata...

après reflexion, je pense que nous allons gérer X base de données bien séparés avec réplication sur les différents sites et remontés d'infos , etc...
la chose semble plus pratique et ainsi nous eviterons les pb de synchro de BDD, et ou d'optimisation sans monter une usine pour mettre en place les guid :o)

merci en tout cas de ton interet


Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
36
Salut,



Les GUID sont uniques,

c'est une clé 128 bits générés aléatatoirement, c'est un nombre parmis 2^128

donc il faut le faire expres pour avoir 2 GUID indentique meme dans une base de données.

http://www.microsoft.com/france/msdn/technologies/technos/windows/info/info.asp?mar=/france/msdn/technologies/technos/framework/info/2004-02-05-strongnames.html

pour plus d'infos



Les UID peuvent être généré en TSQL par NEWID()



select newid() , ....

insert newid(),...



Le probleme de la synchrosation est que la procédure stockée

si la synchro est faite par la meme procedure stockée -->

deux appels a newid() --> enregistrements différents.



Si tu compares les bases et que tes ordres insert de synchro ont les memes UID

tu n'auras pas de problemes.



Le deuxieme probleme, est surtout que si tu enregistres un ensemble
d'enregistrements il faut aller en base pour retrouver les valeurs des
GUID inserés.



Ex. pour les tables pointants sur elles meme comme les arbres.



C'est à toi de voir.

Soit tu mets les GUID dans les procs stocks et la les perf sont nmoindres, sinon

dans le programme et la le nombre de requetes peut etre optimale.



Voila
Messages postés
404
Date d'inscription
mardi 18 décembre 2001
Statut
Membre
Dernière intervention
15 juillet 2014
21
Il ne me semble pas possible de le faire nativement.
En effet que se soit MySQL, SQL Server, Oracle, Sybase, PostgreSQL, Access.
Le clé autoincrémentale ou séquence sont de la forme (valeur max+1).

de plus l'utilisation d'un identifiant "unique" généré doit être fait avec une méthode qui garantisse bien l'unicité de la clé (càd sans collision) sous peine d'avoir une clé en double.

Peut être devrai tu revoir tes séquences pour définir une valeur de départ pour chaque base afin de ne pas avoir de doublon. (propriété IDENTITY(nbDepart, 1))

par ex:
ALTER TABLE nomTable ADD
column_b INT IDENTITY(10000, 1)
CONSTRAINT column_b_pk PRIMARY KEY
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
14
ok merci je vais explorer cette voie :o)

et tester ce newid..
rine ne m'empeche de faire 2 procedure stockee, une pour l'utilisation "courante" qui fait appel a la fonction newid() et une pour la synchro qui prend les données tel quel et roule..

merci de ta réponse


Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."