我想使用 bcp 将 csv 文件导入 sql server 2008 R2 数据库表,使用如下命令:
bcp Database..TableName in TableName.csv -n -T -E -S localhost
我的问题:该表包含一行,该行也在 csv 文件中(创建数据库时插入的默认行)。
我可以以某种方式指示 bcp 忽略此行吗?我尝试使用 -m 来获取最大错误计数,但当 bcp 遇到已经存在的记录(主键)时,它仍然会中止。
我不能直接删除该记录,因为它包含我稍后需要的安装相关信息。
答案1
对于这种情况,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 */