2011-11-16 77 views
1

我正在嘗試SQL Server 2008 Express上的BCP實用程序。我不認爲我想要做的事情可能更加微不足道,但是當我試圖向空表中插入兩行時,仍然遇到主鍵衝突。瑣碎BCP插入的主鍵違規

下面是表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違反錯誤。

所以問題是,我的格式或輸入文件中導致第一列被忽略的問題是什麼?

謝謝。

+0

那麼,我通過使用格式描述符的XML版本來解決這個問題,就像這樣:'<?xml version =「1.0」?> ' – ioss

+0

無論如何,如果任何人具有用於與非XML格式的問題的答案文件,我會很感激...謝謝。 – ioss

回答

1

我從來沒有見過數據類型DEC的主鍵列,不確定小數是否工作。我一直使用整數。 但我認爲問題是PK列沒有標識集,所以當它添加一個新行時它不會自動遞增。在表中創建代碼,替換:

[BOOK_ID] [數字](18,0)NOT NULL, 與 [BOOK_ID] [INT] IDENTITY(1,1)NOT NULL,

乾杯

+0

好吧,似乎關鍵是將PK列設置爲標識。我看到這個[link](http://stackoverflow.com/questions/285899/numeric38-0-as-primary-key-column-good-bad-who-cares)談到數字PK,所以我重新創建該表就像你所建議的,但也喜歡'CREATE TABLE [dbo]。[書籍]( \t [BOOK_ID] [數字](18,0)IDENTITY(1,1)NOT NULL, \t [BOOK_DESCRIPTION] [VARCHAR](200)NULL, 約束[書籍PK] PRIMARY KEY CLUSTERED( \t [BOOK_ID] ASC)WITH ... '和bcp很高興地使用純文本格式插入行。我仍然不明白爲什麼它使用XML格式。 – ioss