Нарушение первичного ключа на тривиальной вставке BCP

Я пробую утилиту BCP на SQL Server 2008 Express. Я не думаю, что то, что я пытаюсь сделать, может быть более тривиальным, но все же я получаю нарушение первичного ключа при попытке вставить две строки в пустую таблицу.

Вот таблица DDL:

CREATE TABLE [dbo].[BOOKS](
    [BOOK_ID] [numeric](18, 0) NOT NULL,
    [BOOK_DESCRIPTION] [varchar](200) NULL,
CONSTRAINT [BOOKS PK] PRIMARY KEY CLUSTERED 
(
[BOOK_ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,     ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

Вот файл формата BCP:

10.0
2
1       SQLNUMERIC          0       3     "\t"     1     BOOK_ID                              ""
2       SQLCHAR             0       0     "\r\n"   2     BOOK_DESCRIPTION                     Modern_Spanish_CI_AS

и вот мой входной файл:

101 BOOK_ABC_001<CR><LF>
102 BOOK_ABC_002<CR><LF>

наконец, вот команда, которую я запускаю:

bcp Database.dbo.BOOKS in books.txt -T -f BOOKS-format.fmt

и вот ошибка, которую я получаю:

Starting copy...
SQLState = 23000, NativeError = 2627
Error = [Microsoft][SQL Server Native Client 10.0][SQL Server]Violation of PRIMARY KEY  constraint 'BOOKS PK'. Cannot insert duplicate key in object 'dbo.BOOKS'.
SQLState = 01000, NativeError = 3621
Warning = [Microsoft][SQL Server Native Client 10.0][SQL Server]The statement has been terminated.

BCP copy in failed

Теперь BCP преуспевает, если я использую входной файл с одной строкой. В этом случае столбцу BOOK_ID присваивается значение 0. Таким образом, кажется, что первое поле в моем входном файле игнорируется, и 0 используется в качестве значения для BOOK_ID для всех строк, что объясняет нарушение PK ошибка.

Итак, вопрос в том, что не так в моем формате или входных файлах, что приводит к игнорированию первого столбца?

Благодарю.

1 ответ

Решение

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

[BOOK_ID] [числовой](18, 0) NOT NULL, с [BOOK_ID] [int] IDENTITY(1,1) NOT NULL,

ура

Другие вопросы по тегам