【发布时间】:2021-02-04 13:42:39
【问题描述】:
我很久以前是一名开发人员,后来进入了管理职位,但又回到了一个新的岗位上做一些轻量级的开发。
我遇到的问题是我需要将.csv 文件导入到 SQL Server 表中以进行进一步处理,我正在处理该表,但其中一列可能有一个“,”,这会导致导入失败。
我知道只要我强制删除“,”它就可以工作,但需要能够以编程方式执行此操作。该文件来自外部来源,因此很遗憾,我无法更正来源或在列周围放置“”作为分隔符。
任何帮助或建议将不胜感激。
PS:请记住,我正在重新学习内容,因此您可能不得不“忽略”任何建议。 ;)
史蒂夫
【问题讨论】:
-
计算机不会有意识或上下文来知道逗号是值的一部分而不是分隔符。您需要预处理 CSV 文件以在包含逗号的值周围添加引号。您已经建议这可能是一个解决方案,因此我不会对此进行详细介绍,因为您似乎已经知道了。理想情况下,应首先纠正外部源以停止生成格式错误的 CSV 文件。
-
你用什么来读取你的 CSV 文件?您的 CSV 格式不正确(即,包含逗号的数据没有被引用)或者您用于读取 CSV 的内容已损坏。
-
在标准 CSV 中,当数据中有逗号时,该字段必须用引号括起来。首先检查文件的格式是否正确,如果不是,请制作者提交正确的格式。
-
从具有 csv 输入功能的 bat 文件运行 sqlcmd.exe。运行速度比在 c# 中执行相同操作要快得多。您可以从 c# Process Class 运行 bat 文件。 SQLCMD 命令也在 PowerShell 中。请参阅:docs.microsoft.com/en-us/sql/tools/…
-
除了其他评论者的明智建议之外,听起来您的限制是您无法影响源文件并且开箱即用的工具不支持您的情况,那么您需要滚动您的自己的方法。 我 主张编写一个预处理器步骤,该步骤采用格式错误的 CSV 并生成格式良好的 CSV。它可以像
readline -> split on comma => if split count is expected, recombine; if split count is one greater than expected, merge columns N and N+1 and then recombine这样简单,这种方法的优点是您可以将原始输入与新输入进行比较
标签: c# sql-server ssis