OVH Cloud OVH Cloud

command Builder et cle primaire

3 réponses
Avatar
olivier
Bonjour à tous,

Je suis sous visual studio 2003, et je met à jour mes données
grace au Command Builder (SqlCommandBuilder) qui me genere ma requete en
automatique.
par le biais de oAdapter.Update.
Ce service est utilisé en mode WebService, par une Application desktop.

Et il me permet de synchroniser une table locale vers une table distante en
sqlserver.

La table locale a un champs id (cle primaire) pour chaque site.
Donc le site A
id | codesite
1 | 00A
2 | 00A
3 | 00A

Donc le site B
id | codesite
2 | 00B
3 | 00B
4 | 00B

Et le site central aura sqlserver
id | codesite
1 | 00A
2 | 00A
3 | 00A
2 | 00B
3 | 00B
4 | 00B

Ma question est la suivante :

Comment mettre à jour cette Table en sachant le champs Id n'est pas unique .
As ton un autre moyen que je ne connais pas pour faire un command builder ?

D'avance Merci

Olivier

3 réponses

Avatar
Patrice
Par définition la clé primaire doit être unique. Ce n'est donc pas id. Cela
pourrait être par exemple le couple (id,codesite).
Une autre approche est d'utiliser un uniqueidentifier (GUID) qui a
l'avantage d'être unique y compris si il est généré sur des machines
différentes.

--
Patrice

"olivier" a écrit dans le message de news:

Bonjour à tous,

Je suis sous visual studio 2003, et je met à jour mes données
grace au Command Builder (SqlCommandBuilder) qui me genere ma requete en
automatique.
par le biais de oAdapter.Update.
Ce service est utilisé en mode WebService, par une Application desktop.

Et il me permet de synchroniser une table locale vers une table distante
en sqlserver.

La table locale a un champs id (cle primaire) pour chaque site.
Donc le site A
id | codesite
1 | 00A
2 | 00A
3 | 00A

Donc le site B
id | codesite
2 | 00B
3 | 00B
4 | 00B

Et le site central aura sqlserver
id | codesite
1 | 00A
2 | 00A
3 | 00A
2 | 00B
3 | 00B
4 | 00B

Ma question est la suivante :

Comment mettre à jour cette Table en sachant le champs Id n'est pas unique
.
As ton un autre moyen que je ne connais pas pour faire un command builder
?

D'avance Merci

Olivier





Avatar
olivier
Patrice ,

Es tu sur que sur 700 sites, il n'y aura pas de probleme de GUID ?

ps : sinon on m'a deconseille de faire le couple (id,codesite).
car cela va ralentir sqlserver car les index ne sont pas clustered

Olivier


"Patrice" a écrit dans le message de news:
%
Par définition la clé primaire doit être unique. Ce n'est donc pas id.
Cela pourrait être par exemple le couple (id,codesite).
Une autre approche est d'utiliser un uniqueidentifier (GUID) qui a
l'avantage d'être unique y compris si il est généré sur des machines
différentes.

--
Patrice

"olivier" a écrit dans le message de news:

Bonjour à tous,

Je suis sous visual studio 2003, et je met à jour mes données
grace au Command Builder (SqlCommandBuilder) qui me genere ma requete en
automatique.
par le biais de oAdapter.Update.
Ce service est utilisé en mode WebService, par une Application desktop.

Et il me permet de synchroniser une table locale vers une table distante
en sqlserver.

La table locale a un champs id (cle primaire) pour chaque site.
Donc le site A
id | codesite
1 | 00A
2 | 00A
3 | 00A

Donc le site B
id | codesite
2 | 00B
3 | 00B
4 | 00B

Et le site central aura sqlserver
id | codesite
1 | 00A
2 | 00A
3 | 00A
2 | 00B
3 | 00B
4 | 00B

Ma question est la suivante :

Comment mettre à jour cette Table en sachant le champs Id n'est pas
unique .
As ton un autre moyen que je ne connais pas pour faire un command builder
?

D'avance Merci

Olivier









Avatar
Patrice
A strictement parler, je crois me souvenir que l'algo utilisé ne le garantit
pas. Toutefois la probabilité que cela arrive est si faible que concrètement
on peut faire comme si....
Voir System.Guid côté .NET ou uniqueidentifier côté SQL Server.

A priori, je ne vois pas ce qui t'empêcherait de le rendre "clustered" si
l'application le nécessite. Je suis toujours un peu gêné par des conseils
d'optimisation à un stade qui me semble prématuré. Je ferais ce qui est le
plus logique pour l'application et je tunerais ensuite la base avec un
volume similaire à celui visé pour pouvoir ajuster si nécessaire en
connaissance de cause...

--
Patrice

"olivier" a écrit dans le message de news:

Patrice ,

Es tu sur que sur 700 sites, il n'y aura pas de probleme de GUID ?

ps : sinon on m'a deconseille de faire le couple (id,codesite).
car cela va ralentir sqlserver car les index ne sont pas clustered

Olivier


"Patrice" a écrit dans le message de news:
%
Par définition la clé primaire doit être unique. Ce n'est donc pas id.
Cela pourrait être par exemple le couple (id,codesite).
Une autre approche est d'utiliser un uniqueidentifier (GUID) qui a
l'avantage d'être unique y compris si il est généré sur des machines
différentes.

--
Patrice

"olivier" a écrit dans le message de news:

Bonjour à tous,

Je suis sous visual studio 2003, et je met à jour mes données
grace au Command Builder (SqlCommandBuilder) qui me genere ma requete en
automatique.
par le biais de oAdapter.Update.
Ce service est utilisé en mode WebService, par une Application desktop.

Et il me permet de synchroniser une table locale vers une table distante
en sqlserver.

La table locale a un champs id (cle primaire) pour chaque site.
Donc le site A
id | codesite
1 | 00A
2 | 00A
3 | 00A

Donc le site B
id | codesite
2 | 00B
3 | 00B
4 | 00B

Et le site central aura sqlserver
id | codesite
1 | 00A
2 | 00A
3 | 00A
2 | 00B
3 | 00B
4 | 00B

Ma question est la suivante :

Comment mettre à jour cette Table en sachant le champs Id n'est pas
unique .
As ton un autre moyen que je ne connais pas pour faire un command
builder ?

D'avance Merci

Olivier