Мой первый вопрос - Нарушение ограничения PRIMARY KEY - PullRequest
0 голосов
/ 17 января 2019

У меня следующая проблема: я хочу выполнить скрипт, в котором я пытаюсь вставить данные из восстановленной базы данных (iNode-8-24-14-Orig) в созданную мной базу данных.

Код:

/****************************************************/
SET IDENTITY_INSERT [dbo].[XHQ_HIER_DEF] ON;
GO
INSERT INTO [dbo].[XHQ_HIER_DEF]
           ([HIER_KEY]
           ,[HIER_NAME]
           ,[HIER_DESC]
           ,[SYNONYM_DEF_LEVEL]
           ,[CRT_XHQUSERID]
           ,[CRT_TIMESTAMP]
           ,[CRT_TZ_BIAS]
           ,[UPDT_XHQUSERID]
           ,[UPDT_TIMESTAMP]
           ,[UPDT_TZ_BIAS])
SELECT [HIER_KEY]
      ,[HIER_NAME]
      ,[HIER_DESC]
      ,[SYNONYM_DEF_LEVEL]
      ,[CRT_XHQUSERID]
      ,[CRT_TIMESTAMP]
      ,[CRT_TZ_BIAS]
      ,[UPDT_XHQUSERID]
      ,[UPDT_TIMESTAMP]
      ,[UPDT_TZ_BIAS]
  FROM [iNode-8-24-14-Orig].[dbo].[XHQ_HIER_DEF]
GO
SET IDENTITY_INSERT [dbo].[XHQ_HIER_DEF] OFF;
GO
/****************************************************/

Но я получаю эту ошибку для каждой таблицы:

Нарушение ограничения PRIMARY KEY 'XPKXHQ_HIER_DEF'. Не могу вставить дубликат ключа в объекте 'dbo.XHQ_HIER_DEF'. Дубликат значения ключа (1).

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

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Решение очевидно: не вставляйте повторяющиеся значения первичного ключа.

Из твоего полагаю:

  1. Вы используете MSSQL со связанным сервером
  2. ПК состоит только из HIER_KEY поля

Итак:

/****************************************************/
SET IDENTITY_INSERT [dbo].[XHQ_HIER_DEF] ON;
GO
INSERT INTO [dbo].[XHQ_HIER_DEF]
        ([HIER_KEY]
        ,[HIER_NAME]
        ,[HIER_DESC]
        ,[SYNONYM_DEF_LEVEL]
        ,[CRT_XHQUSERID]
        ,[CRT_TIMESTAMP]
        ,[CRT_TZ_BIAS]
        ,[UPDT_XHQUSERID]
        ,[UPDT_TIMESTAMP]
        ,[UPDT_TZ_BIAS])
SELECT [HIER_KEY]
    ,[HIER_NAME]
    ,[HIER_DESC]
    ,[SYNONYM_DEF_LEVEL]
    ,[CRT_XHQUSERID]
    ,[CRT_TIMESTAMP]
    ,[CRT_TZ_BIAS]
    ,[UPDT_XHQUSERID]
    ,[UPDT_TIMESTAMP]
    ,[UPDT_TZ_BIAS]
FROM [iNode-8-24-14-Orig].[dbo].[XHQ_HIER_DEF] T1 
WHERE NOT EXISTS(
    SELECT 1 FROM [dbo].[XHQ_HIER_DEF] T2 
        WHERE 
        T1.HIER_KEY = T2.HIER_KEY
)
GO
SET IDENTITY_INSERT [dbo].[XHQ_HIER_DEF] OFF;
GO
/****************************************************/

Предупреждение: производительность такой вставки может быть особенно ужасно.

0 голосов
/ 17 января 2019

Это мой первый вопрос на этом сайте.

А нам все равно ... почему?

Есть идеи, как это исправить?

Прочитать ошибку, исправить данные? Ошибка говорит очень ясно, в чем проблема:

Невозможно вставить дубликат ключа в объект "dbo.XHQ_HIER_DEF".

Не вводите одно и то же значение ключа несколько раз. Период. Если вы определяете поле в качестве первичного ключа, значения для каждого определения должны быть уникальными в ключе.

Уже существует запись с идентификатором 1, или ваши исходные данные содержат несколько строк с одинаковым значением, что недопустимо для вашей модели данных.

Как правило, для таких проблем помогает чтение ошибки. В вашем случае ЧРЕЗВЫЧАЙНО ясно в описании, в чем заключается проблема, даже если вы найдете значение, вызывающее проблему:

Дубликат значения ключа (1).

...