Sql-Server

bcp 導入文件如何忽略重複項?

  • September 27, 2010

我想使用 bcp 使用如下命令將 csv 文件導入 sql server 2008 R2 數據庫表:

bcp Database..TableName in TableName.csv -n -T -E -S localhost

我的問題:該表包含一行,它也在 csv 文件中(創建數據庫時插入的預設行)。

我可以以某種方式指示 bcp 忽略這一行嗎?我嘗試了 -m 來獲取最大錯誤計數,但是當 bcp 遇到已經存在的記錄(主鍵)時,它仍然會中止。

我不能只刪除這條記錄,因為它包含我稍後需要的安裝相關資訊。

對於這種情況,bcp 沒有很多複雜的錯誤處理。

我認為你的選擇是:

從您的 csv 中刪除一個重複的行。

編寫允許更複雜的錯誤處理的 DTS/SSIS 包。

bcp 進入一個臨時表並使用 t-sql 從臨時表插入到活動表中,使用左連接檢查該行是否存在。就像是:

insert into TableName
   (column1, column2, ...)
   select t1.column1, t1.column2, ...
       from TempTableName t1
           left join TableName t2
               on t1.primarykey = t2.primarykey
       where t2.primarykey is null /* row does not already exist */

引用自:https://serverfault.com/questions/185050