sql-server - 自动将 CSV 文件导入 SQL Server
问题描述
我正在尝试将许多不同的 csv 文件导入 SQL Server 2008R2 数据库
文件中的数据以逗号分隔。我对文件格式没有发言权。
有些列是文本,并用双引号分隔(“像在 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 中进行整个导入?这是混乱和耗时的。
解决方案
好的,所以我发现很多人在这里和 StackExchange 上问这个问题,并被告知无法完成,您需要使用 SSIS。
您只需要一个 SQL 格式文件。尽管有一些关于如何使用格式文件的链接,但我只找到了一个解释它如何正常工作的链接,其中包括带有逗号的文本字段。
这是在 sql 脚本中使用的语法
BULK INSERT raw.routes FROM N'C:\WhereMyTextFileis\Import.txt'
WITH (
FORMATFILE = N'C:\WhereMyFormatFileIS\MyFormat.fmt'
,FIRSTROW = 2
)
这是我的格式文件的内容
10.0
8
1 SQLCHAR 0 50 "," 1 RouteID ""
2 SQLCHAR 0 50 ",\"" 2 RouteShortName Latin1_General_CI_AS
3 SQLCHAR 0 100 "\"," 3 RouteLongName Latin1_General_CI_AS
4 SQLCHAR 0 200 "," 4 RouteDescription ""
5 SQLCHAR 0 50 "," 5 RouteType ""
6 SQLCHAR 0 2000 "," 6 RouteURL ""
7 SQLCHAR 0 100 "," 7 RouteColour ""
8 SQLCHAR 0 100 "\r\n" 8 RouteTextColour ""
奇怪的 ","\"" 是删除引用文本列 RouteShortName 开头的双引号,而 "\"," 删除引用文本列 RouteShortName 末尾的引号。但重要的一点是逗号保留在列数据内容中。
希望这也对其他人有所帮助。
埃里克
推荐阅读
- javascript - 在谷歌浏览器中激活麦克风时出错
- python - 如何使用 python 和 ML 在粒度级别细分客户端?
- django - 如何显示来自 django 模型的图像?
- db2 - 如何配置数据源中的库以将 AS400 与部署在 Websphere 8.5 中的 JT400 连接起来?
- c++ - 使用 makefile 编译目录中的所有 cpp 文件
- android - 如何在 Android Studio 中打开主题编辑器?
- javascript - request.args.get() 返回无
- c# - 如何将 ImageMap 控件和热点添加到由数据库中的图像填充的网页
- google-bigquery - BigQuery 检查整个表的空值
- javascript - 如何使用 v-for (Vue.js) 循环 JSON 对象并将渲染的 DOM 拆分为两个 div 容器?