Ошибка вставки SQL - PullRequest
       27

Ошибка вставки SQL

0 голосов
/ 02 июня 2010

Это мое заявление о вставке

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))

Я пытаюсь вставить в таблицу ProductStore все продукты, сопоставленные с категориями, сопоставленными с хранилищем 1. Столбец StoreID может определенно иметь более одной строки с одной и той же записью. И я получаю следующую ошибку: Нарушение ограничения первичного ключа ...

Однако следующий запрос работает:

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

Итак, очевидно, столбец ProductID пытается вставить один и тот же более одного раза.

Можете ли вы увидеть что-то не так с моим запросом?

ТИА

Ответы [ 3 ]

1 голос
/ 02 июня 2010

Выньте оператор INSERT INTO и просто запустите SELECT - вы сможете довольно быстро определить, где находятся дубликаты.

Я предполагаю, что вы немного ошибаетесь в том, что на самом деле делает * 1005, о чем свидетельствует тот факт, что у вас есть круглые скобки вокруг ProductId. SELECT DISTINCT гарантирует удаление дубликатов только тогда, когда все столбцы в списке выбора совпадают. В этом случае не гарантируется, что вы получите только одну строку для каждого ProductId.

1 голос
/ 02 июня 2010

Я не вижу ни одной части этого запроса, исключающей записи, уже находящиеся в таблице.

0 голосов
/ 02 июня 2010

select distinct productid выбирает существующий идентификатор и, следовательно, нарушает ограничение первичного ключа. Почему бы вам не создать первичный ключ, используя увеличение идентификатора? В этом случае вам не нужно беспокоиться о самом идентификаторе, он будет сгенерирован для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...