Ошибка при выполнении хранимой процедуры - PullRequest
1 голос
/ 25 января 2011

Я пытаюсь выполнить хранимую процедуру, которая терпит неудачу при вставке данных из одной таблицы в другую.Ошибка:

Невозможно вставить строку повторяющегося ключа в объект 'ExtpndPart1' с уникальным индексом 'IDX_Primary'

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

IF EXISTS (SELECT * FROM dbo.sysindexes WHERE name  =  N'PK_ExtpndPart1' )
 ALTER TABLE [dbo].[ExtpndPart1] DROP [PK_ExtpndPart1]

Может ли кто-нибудь помочь мне ??

Ответы [ 3 ]

1 голос
/ 25 января 2011

Похоже, вы ищете / отбрасываете неправильный индекс. Вы отбрасываете PK_ExtpndPart1, но ошибка относится к IDX_Primary.

0 голосов
/ 26 января 2011

Либо вы, либо ваш сервер явно ошибаетесь. Если вы правы, и не может быть попыток вставить дубликаты, которые нарушали бы IDX_Primary, тогда, очевидно, это ошибка вашего сервера.

В противном случае вы могли бы просто упустить из виду тот факт, что дубликаты так или иначе действительно присутствуют. Либо они находятся в исходной таблице, либо таблица назначения не обрезается должным образом.

Это нормально, что вы не желаете делиться конфиденциальным кодом, но тогда у нас мало информации помимо того, что вы раскрыли.

В любом случае, я подтверждаю то, что вам уже сказали: оскорбленный индекс - IDX_Primary, а не PK_ExtpndPart1. Ну так что ты делаешь? Сначала найдите скрипт, который создает IDX_Primary и обратите внимание на индексное выражение / выражения. Сделав это, просто используйте выражение (я) в простом запросе к исходной таблице, чтобы узнать, действительно ли нет дубликатов.

Я думаю, что вы могли бы легко придумать какой-нибудь сценарий такого рода, но только потому, что я не понимаю, как еще я могу помочь вам в отсутствии деталей, я решил поделиться с вами этим небольшим моим шаблоном:

SELECT
  ..., /* column(s) or expression(s) as used in IDX_Primary
         (actually, their counterparts in the source table) */
  COUNT(*)
FROM ... /* your source table */
GROUP BY ... /* the same IDX_Primary column(s) or expression(s) */
HAVING COUNT(*) > 1

Как видите, результатом будут самые дубликаты, которые наверняка расстроят IDX_Primary.

0 голосов
/ 25 января 2011

Похоже, вы пытаетесь отбросить индекс PK_ExtpndPart1, но индекс нарушителя равен IDX_Primary.

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