簡體   English   中英

SqlBulkCopy進入具有復合主鍵的表

[英]SqlBulkCopy into table with composite primary key

我正在嘗試使用SqlBulkCopy通過在我的應用程序中手動填充DataTable將新行插入到我的數據庫表中。

這適用於所有表, 但具有由3列組成的復合主鍵的除外 每當我嘗試將SqlBulkCopy任何內容放入此表時,我都會收到以下錯誤:

Violation of PRIMARY KEY constraint 'PK_MYCOMPOSITEKEY'. Cannot insert duplicate key in object 'dbo.MyTable'.
The statement has been terminated.

這甚至可能嗎?

我嘗試使用以下方法設置DataTable的主鍵:

dt.PrimaryKey = new[] {dt.Columns["PKcolumn1"], dt.Columns["PKcolumn2"], dt.Columns["PKcolumn3"]};

但又一次,沒有運氣。

你遇到的問題是數據。

在輸入文件中有一個或兩個

與您在表中已有的e pk列中具有相同數據的行

要么

該文件至少有兩行具有相同的pk列值

批量插入臨時表。 清理任何重復的記錄。 然后使用直接SQL進行插入。 編寫插入代碼時,請確保將其限制為臨時表中不在prod表中的記錄。

在點擊數據庫之前,您應該驗證批量的批量數據,問題也可能存在(不只是與現有約束沖突,或者在數據庫中記錄)。 它確實有效,通常報告它是正確的。

盡管如此,DataSet甚至DataReaders的整個展示都是一個混亂的映射練習,糟糕的無類型設計,大量不必要的轉換,分配,基於對象[]的值,整個事物變成了順序,類型和字符串相關的混亂(只有MS的東西)可以設計和保持設計)。 另一方面,原生OLEDB批量接口更清潔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM