2010-06-02 9 views
0

Ceci est mon Insérer Déclarationerreur d'insertion sql

INSERT INTO ProductStore (ProductID, StoreID, CreatedOn) 
(SELECT DISTINCT(ProductId), 1, GETDATE() FROM ProductCategory 
WHERE EXISTS (SELECT StoreID, EntityID FROM EntityStore 
WHERE EntityType = 'Category' AND ProductCategory.CategoryID = EntityStore.EntityID AND StoreID = 1)) 

Je suis en train d'insérer dans la table ProductStore, tous les produits qui sont mis en correspondance avec les catégories qui sont mis en correspondance avec Entreposez 1. La colonne StoreID peut certainement avoir plus d'un rangée avec la même entrée. Et je reçois l'erreur suivante: Violation de contrainte de clé primaire ...

Cependant, la requête suivante fonctionne:

INSERT INTO ProductStore (ProductID, StoreID, CreatedOn) 
VALUES (2293,1,GETDATE()),(2294,1,GETDATE()) 

Donc, apparemment, la colonne ProductID tente d'insérer le même plus une fois que.

Pouvez-vous voir quelque chose de mal avec ma requête?

TIA

Répondre

1

Je ne vois aucune partie de cette requête qui exclut les enregistrements déjà dans la table.

+0

qui était elle !! Merci:) – user228058

0

select distinct productid consiste à sélectionner un ID existant et celui-ci en violation avec votre contrainte de clé primaire. Pourquoi ne créez-vous pas la clé primaire à l'aide de l'incrément d'identité? Dans ce cas, vous n'avez pas besoin de vous inquiéter de l'identifiant lui-même, il sera généré pour vous.

1

Sortez la déclaration INSERT INTO et exécutez simplement le SELECT - vous devriez être en mesure d'identifier assez rapidement où les doublons sont.

Je pense que vous vous trompez un peu sur ce que fait effectivement SELECT DISTINCT, comme en témoigne le fait que vous avez des parenthèses autour du ProductId. SELECT DISTINCT garantit uniquement l'élimination des doublons lorsque toutes les colonnes de la liste de sélection sont les mêmes. Il ne garantit pas dans ce cas que vous obtenez seulement une ligne pour chaque ProductId.

+0

Alors, comment puis-je obtenir 1 ligne pour chaque ID de produit? J'ai essayé le groupe par, qui a fonctionné dans le select, mais obtenant toujours la même erreur – user228058