Insertion auatomatique de GUID sous sql serveur 2000 [Résolu]

Arthenius 1183 Messages postés mercredi 21 janvier 2004Date d'inscription 6 septembre 2011 Dernière intervention - 30 mai 2005 à 10:05 - Dernière réponse : Arthenius 1183 Messages postés mercredi 21 janvier 2004Date d'inscription 6 septembre 2011 Dernière intervention
- 31 mai 2005 à 09:16
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..."
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Arthenius 1183 Messages postés mercredi 21 janvier 2004Date d'inscription 6 septembre 2011 Dernière intervention - 30 mai 2005 à 12:10
3
Merci
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..."

Merci Arthenius 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de Arthenius
Meilleure réponse
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 30 mai 2005 à 22:10
3
Merci
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

Merci nhervagault 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de nhervagault
shaiulud 405 Messages postés mardi 18 décembre 2001Date d'inscription 15 juillet 2014 Dernière intervention - 30 mai 2005 à 11:51
0
Merci
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
Commenter la réponse de shaiulud
Arthenius 1183 Messages postés mercredi 21 janvier 2004Date d'inscription 6 septembre 2011 Dernière intervention - 31 mai 2005 à 09:16
0
Merci
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..."
Commenter la réponse de Arthenius

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.