2010-06-28 4 views
2

J'ai deux tables identiques dans deux bases de données différentes avec les mêmes données, mais elles ont des clés primaires différentes, je dois les mettre à jour pour qu'elles aient la même clé. qu'aucun des tables avait une clé en commun et qu'il n'y avait pas de doublonsMettre à jour la clé primaire de la table dans une autre base de données

UPDATE db1.dbo.Table 
SET db1.dbo.Table.pcol = rightPcol.pcol 
FROM db1.dbo.Table 
JOIN db2.dbo.Table AS rightPcol ON db1.dbo.Table.2ndIdent = db2.dbo.Table.2ndIdent 

il en résulte cependant en « violation de contrainte de clé primaire. Impossible d'insérer clé en double dans l'objet »

lors de l'ajout d'une clause where pour ne pas mettre à jour toute valeur de db1 pcol qui existait dans le db2 pcol il n'a pas mis à jour quoi que ce soit, il semble que cela essaie de mettre à jour avec la clé primaire dans db1 au lieu de db2.

toute aide est grandement appréciée!

// fixe mineure erreur d'orthographe :)

Répondre

3

Pour être honnête, il n'y a pas grand chose à dire - le message d'erreur décrit assez bien ce qui est mal.

Vous essayez de mettre à jour une colonne PK à une valeur qui existe déjà.

Je vérifier pour vous assurer que

  1. en se joignant à 2ndIdent vous n'êtes pas en train de créer des doublons.
  2. il n'y a vraiment pas de doublons dans les tables sur DB1 et DB2

Votre SQL semble bien donc il doit être un problème avec les données.

Pour vérifier les doublons vous pouvez utiliser quelque chose comme ceci:

Select 2ndIndent 
From Table 
Group By 2ndIdent 
Having Count(2ndIndent) > 1 
+0

apparemment le 2ndIdent avait des doublons dans ce même si le programmeur principal a dit qu'il n'y avait pas ce qui m'a fait même pas regarder là-bas, je vous remercie beaucoup pour votre Aidez-moi. – Joakim

0

Le « pcol » est la colonne clé primaire?

Vous obtenez "Violation de la contrainte de clé primaire" lorsque la clé primaire de "rightPcol" est dupliquée avec n'importe quelle ligne de la table dans "db1". Vous devez sélectionner la duplication à partir des deux tables et résoudre le conflit (son retrait dépend de ce que vous n'avez pas spécifié).

Ainsi, le premier, vous devez sélectionner les duplications:

SELECT T1.pcol 
FROM db1.dbo.Table.pcol AS T1 
INNER JOIN db2.dbo.Table.pcol AS T2 
    ON T1.pcol = T2.pcol 
+0

Je l'ai fait, mais ce n'était pas le problème, mais Barry a trouvé le problème. Appréciez-vous d'essayer d'aider. – Joakim

Questions connexes