【发布时间】:2014-12-15 13:15:49
【问题描述】:
更新:最终使用了 Johnny Bubriski 创建的这种方法,然后对其进行了一些修改以跳过重复项。像魅力一样工作,并且显然非常快。 链接:http://johnnycode.com/2013/08/19/using-c-sharp-sqlbulkcopy-to-import-csv-data-sql-server/
我一直在寻找这个问题的答案,但似乎找不到。我正在执行 T-SQL 批量插入以将数据从 csv 文件加载到本地数据库中的表中。我的陈述是这样的:
BULK INSERT Orders
FROM 'csvfile.csv'
WITH(FIELDTERMINATOR = ';', ROWTERMINATOR = '0x0a', FORMATFILE = 'formatfile.fmt', ERRORFILE = 'C:\\ProgramData\\Tools_TextileMagazine\\AdditionalFiles\\BulkInsertErrors.txt')
GO
SELECT *
FROM Orders
GO
当我尝试插入重复的行(例如两次获取相同的 csv 文件)时出现异常,这会导致整个插入停止并回滚。可以理解,因为我违反了主键约束。现在我只是显示一个消息框,让用户知道 csv 文件中存在重复项,但这当然不是正确的解决方案,实际上根本不是解决方案。我的问题是,有什么方法可以忽略这些重复的行并跳过它们,只添加不重复的行?也许以某种方式尝试捕获?
如果不可能,从 csv 文件导入数据的“正确”(因为没有更好的词)方法是什么?这个例外给我带来了一些麻烦。我确实在某处读过,您可以设置一个临时表,将数据加载到其中并在插入之前在两个表之间选择不同的。但是使用批量插入真的没有更简单的方法吗?
【问题讨论】:
-
将数据导入临时表,清理它们,然后将它们插入到目的地。否则,使用 SSIS 作为导入流程的一部分进行清理
-
St0ffer - 您能否详细说明您如何修改解决方案以跳过重复项?
-
@Ryan 很抱歉让您失望了,但大约 6 年后我什么都不记得了;)
标签: sql sql-server csv bulkinsert sql-server-2014