2016-04-12 3 views
-1

Я получаю эту ошибкуSQL ошибка вставки сервера из-за ключом

Нарушение ограничения PRIMARY KEY 'X_dbo.XYZ. Не удается вставить дублирующий ключ в объект ...

Уверен, что это не вызвано дублирующим ключом!

Я знаю, что SQL Server использует «механизм» для вставки ключа по умолчанию при добавлении строки (в моем случае int).

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

Я считаю, что это вызвано этим «механизмом», что я не в полной мере понять

Например у меня есть в таблице XYZ ряд

Id  Name 
1  "some name" 

Я удалить эту строку, то я пытаюсь добавить новый ряд с 1 как Id

INSERT .... 
VALUES (1, 'some other name for new row') 

и я получаю эту ошибку.

Не указать идентификатор вставки для меня не вариант, мне нужна работа или эта ошибка.

Спасибо!

ОБНОВЛЕНО

I таблица создается с помощью Entity Framework и код-первого подхода (C#)

[Table("XYZ")] 
public class XYZ: InheritDb 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public long ID { get; set; } 
    [Required] 
    public string Key { get; set; } 
    [Required] 
    public string Value { get; set; } 

    public string Description { get; set; } 
    //.... 
} 

и сценарий вставки походит

SET IDENTITY_INSERT [dbo].[XYZ] ON 
GO 

INSERT [dbo].[XYZ] ([ID], [Key], [Value], [Description], ...) 
VALUES (1, N'PaymentMode', N'Test', N'PaymentMode', ...) 
+4

Покажите нам инструкцию create table и инструкции вставки. – jarlh

+0

И любые триггеры – MatBailie

+0

Есть ли какой-то триггер? Вы уверены, что это не связано с другой таблицей? – Shnugo

ответ

1

Если у вас есть автоинкремент, установленный на вашем столе, даже если вы удалите запись, таблица не сбрасывает следующий номер строки, которую он будет вставлять. Поэтому, если вы вставляете 1 строку, получишь ID = 1. Если вы удалите эту строку и добавите новую строку, эта новая строка будет ID = 2, хотя 1 больше не существует. Чтобы сбросить это значение, используйте следующую команду:

DBCC CHECKIDENT ([dbo].[XYZ], RESEED, 0) 
+0

Я надеялся не уронить стол. Если есть способ сбросить этот следующий номер id, это будет идеально. – Catalin

+0

См. Обновленный ответ –

+0

Да, это именно то, что я искал, большое вам спасибо. – Catalin

0

если вы установили Id is 'Identity Column' Вы не вставляете строку со старым идентификатором. для вставки вы должны войти в вкладку «Свойства», в «Дизайнер таблиц», установить «Столбец идентичности» is ''.

Смежные вопросы