将超过 255 个字符从 excel 导入到 sql server(上一个问题 - 如何使用 ssis 将文本限定 CSV 动态加载到 sql server)

Posted

技术标签:

【中文标题】将超过 255 个字符从 excel 导入到 sql server(上一个问题 - 如何使用 ssis 将文本限定 CSV 动态加载到 sql server)【英文标题】:Import more than 255 Characters from excel to sql server (previous question - how to load text qualifed CSV dynamically to sql server using ssis) 【发布时间】:2019-09-06 08:53:04 【问题描述】:

我有一个 CSV 文件,其中包含 salesforce 数据并使用 python API 调用生成,我正在尝试使用 SSIS 将文件加载到 MS SQL DB 中。

我需要一个 C# 脚本来纠正问题,因为数据不一致(列数和列顺序可以随时更改)。下面提到的是更多细节:

该文件不是完全文本限定的。很少有符合文本条件的记录,并且这些记录中包含引号/逗号。

我尝试关注以下博客:-

Load Text/ CSV files To table when Number of Column Can Change in Source File/s - SQL Server Integration Services(SSIS) Tutorial DYNAMIC DATA COLUMN POSITION FOR FLAT FILES IN SSIS

但这种逻辑只有在文本中没有引号或逗号时才有效,否则程序会因数据处理而失败。

我查看了关于 techbrothersit 的更多文章,但我不知道如何处理文本限定数据。谁能为此提供一个可能的解决方案。

更新 1

我在这个问题上遇到了很多困难,并考虑过切换到 excel,但我也面临一些 excel 问题。 我正在将数据从 excel 源导入到 oledb 目标,但它会将数据截断为 255 个字符,而我需要整个数据。作为一种解决方案,我不想尝试注册表编辑,因为我稍后会将我的程序部署到生产环境中,这会影响性能。 将无法在第一行保留更多长度的数据(数据来自 API)。 所以现在的问题是我想要没有截断的数据(使用 excel 我能够克服 CSV 中存在的问题)。

非常感谢任何帮助。

提前谢谢你。

【问题讨论】:

如果您在单元格数据中获得comma,我认为您不会找到解决方案,因为它是逗号分隔值,但上次当我遇到此问题时,我们将逗号替换为特殊char &lt;:&gt; 类似这样的东西并写为 csv 并且当你插入数据时将这个 <:> 再次替换为逗号 how to check column structure in ssis?的可能重复 如果您的数据包含任何逗号,我将其称为垃圾数据并需要不同的格式。另一个分隔符,如管道 |或者像 GUID 这样的复杂分隔符可能很难看,但可以完成工作。 请检查 cmets 中提到的链接,我认为它会解决问题 请发布您所面临问题的实际样本。包含逗号的数据值是否始终是文本限定的?如果列的数量和列的顺序可以随时改变,不要理会 SSIS,用 C# 写一些东西。您将不得不编写一个完全自定义的加载程序来为您执行此操作。 【参考方案1】:

SSIS 不适合解决这种问题 - 它更适合重复加载静态文件结构。到那时,文件的连接管理器是静态的——它永远不会改变。雪上加霜的是,您有一个没有文本限定符的分隔文件,因此如果文本值恰好与列分隔符匹配,则数据将溢出到其他列中。这将有效地破坏您的数据导入。

建议您逆流而上,使用 API 生成器创建标准化的输出文件。你能做到吗?

【讨论】:

谢谢。我们尝试在 Python API 调用中对列进行硬编码,该调用从 Salesforce 获取数据并将数据导出到 CSV,现在我可以使用 ssis 加载 csv。

以上是关于将超过 255 个字符从 excel 导入到 sql server(上一个问题 - 如何使用 ssis 将文本限定 CSV 动态加载到 sql server)的主要内容,如果未能解决你的问题,请参考以下文章

将 post.get('href') 转换为文本或字符串形式,Excel 无法处理超过 255 个字符的超链接

将包含超过255个字段的制表符分隔文本文件导入两个访问表的工作代码

Vba excel从给定长度之间的字符串中提取文本

Excel导入数据到Sql server 中出错:“文本被截断,或者一个或多个字符在目标代码页中没有匹配项”

VBA范围255个字符限制[重复]

Excel VBA:将变体数组返回到选定范围时需要 255 转置字符限制的解决方法