【发布时间】:2019-09-24 07:09:54
【问题描述】:
我正在尝试将多个不同的 csv 文件导入 SQL Server 2008R2 数据库
文件中的数据以逗号分隔。 我对文件格式没有发言权。
有些列是文本,并用双引号分隔(“like in excel”)。 这些列包含的文本中可能有额外的逗号(“但是,它让我发疯”)..
我尝试使用批量插入将文本文件加载到多个 SQL 表中。但是,文本列中嵌入的逗号会导致它崩溃。 SQL Server 2017 包含设置FORMAT =CSV and FIELDQUOTE = '"' 的选项,但我坚持使用 SQL Server 2008R2。
我可以使用 DTS/SSIS,但它将 VS 版本链接到 SQL 版本。因此,如果我在 VS2012 或 VS2010 中编写 SSIS,它可能不适用于我们的 SQL Server 2008R2。而且我认为我们没有任何 VS2008。
那么导入这些 CSV 文件的下一个最佳方法是什么。
批量上传是将六个不同的 csv 文件上传到不同表中的最简洁的方法。
我是否预处理 csv 文件并用管道替换逗号。如果是这样,我怎么知道要替换哪些逗号(正则表达式?)? 还是我在 .Net 中进行整个导入?这既麻烦又耗时。
【问题讨论】:
-
在不同版本的 VS 中创建的 SSIS 包很少不会在不同版本中打开,但是较新版本的 Visual Studio 应该可以与较旧的数据库版本一起使用。这应该不是问题。我建议至少尝试在 VS2012 中制作一个测试包连接到数据库并在文件中写入一些示例数据以进行验证。不会占用您太多时间。
-
IMO 是使用 SQLCLR 创建自定义解决方案的最佳方式。
-
如果您习惯使用 C#,那么我会考虑编写一个程序来读取 csv 文件并使用 SQLBulkCopy 插入数据库:johnnycode.com/2013/08/19/…
-
SQL Server 在处理符合 RFC4180 的 CSV 文件方面非常糟糕。例如,Microsoft 花了 10 年时间才让 CSV 导出在 SSRS 中正常工作。我与 DarkoMartinovic 和 SteveFord 在一起 - 使用 SQL CLR 或使用 SQLBulkCopy 的 C# 客户端程序。
标签: sql-server csv bulkinsert