Ошибка дублирования при вставке уникальных неповторяющихся значений T-SQL - PullRequest
0 голосов
/ 07 декабря 2018

Вот еще одна моя ошибка, с которой я не могу бороться:

Я пытаюсь добавить (оператор INSERT INTO sql) уникальные записи из поля WHID (таблица ClientEpisode) в поле WHID (таблица EHREpisode):

      INSERT INTO 
                  [WH].[Fact].EHREpisode ([WHID])
         SELECT
               [HP].[bhcms5].ClientEpisode.WHID
         FROM
             [HP].[bhcms5].ClientEpisode

Оба поля WHID уникальны (не дублированы) в обеих таблицах и между собой, но у меня по-прежнему возникает ошибка:

enter image description here

Plz, см. Сообщение об ошибке, большими буквами:

" Невозможно вставить строку с повторяющимся ключом в объект« Fact.EHREpisode »с уникальным индексом« IX_EHREpisode ». Повторяющийся ключзначение равно (NULL, NULL>). Оператор завершен."

Ниже приведены структуры моих таблиц:

EHREpisode: enter image description here

ClientEpisode: enter image description here

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Ошибка очень очевидна: существует уникальный индекс IX_EHREpisode с такими столбцами, что ваш запрос пытается вставить значение (null, null) два раза.

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

  • Перейти к «Обозревателю объектов» слева от SSMS
  • Найти интересующую вас таблицу «EHREpisode»
  • Открыть «Индексы».Вы должны найти IX_EHREpisode здесь.Откройте его.
  • Внутри вы увидите столбцы, включенные в этот индекс.Будет несколько из них, которые оба примут значение NULL, если ваш запрос будет выполнен

Таким образом, вам придется либо изменить индекс, либо переосмыслить свой запрос.

0 голосов
/ 07 декабря 2018

Похоже, что в сообщении об ошибке говорится о том, что NULL значения являются причиной (ваш снимок экрана трудно прочитать).Таким образом, вы можете попробовать исключить NULL значения из вставки:

INSERT INTO [WH].[Fact].EHREpisode ([WHID])
SELECT [HP].[bhcms5].ClientEpisode.WHID
FROM [HP].[bhcms5].ClientEpisode
WHERE [HP].[bhcms5].ClientEpisode.WHID IS NOT NULL;

В качестве альтернативы рассмотрите возможность использования индекса для WHID, который игнорирует NULL значения:

CREATE UNIQUE NONCLUSTERED INDEX idx_col1
ON [HP].[bhcms5].ClientEpisode (WHID)
WHERE WHID IS NOT NULL;
...