bcp 导入文件如何忽略重复?

bcp 导入文件如何忽略重复?

我想使用 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 */

相关内容