我在 Visual Studio 2019 中有 SSIS 包,我想从 CSV 文件导入。主要问题是我无法传递值来使用变量定义列分隔符。是否有任何解决方案将变量传递到平面文件连接的列分隔符(使用表达式或类似的东西传递值)?
一种方法是使用 BULK insert,但我们无法在 BULK Insert 中进行映射。
不,正如 Thom A 所说,每个列
<DTS:FlatFileColumn
都有一个属性 DTS:ColumnDelimiter="_x002C_"
指定此处使用的分隔符 2C 是逗号。
有趣的事实是,最后一列偏离了列分隔符,因为它将列出行分隔符值
DTS:ColumnDelimiter="_x000D__x000A_"
0D 0A 是回车、换行
SSIS 不公开任何内容,允许您在运行时修改平面文件连接管理器的所有列分隔符值。
最好的答案是告诉您的数据提供商“这是我接受的格式”并让他们标准化某些内容。逗号、管道、刺,不在乎,只是一些一致的分隔符。
下一个选项,预处理。如果您知道提供商 A 向您发送了一个 Pipe
|
分隔文件,请调用 PipeToCSV.dtsx 包(或 C# 或 python 或任何技术)将该文件格式化为您期望的格式。编写 N 个转换器预处理,现在你的“实际”SSIS 包就变得微不足道了,因为你不必担心让它做它不能做的事情。
但是我的文件本身也有差异...如果这是你的问题,那么你正在尝试编写一个通用/slurp-and-burp/从任何类型到任何类型的过程,而这不是 SSIS 的职责。它与输入和输出的设计时元数据紧密绑定。这意味着它不能在运行时更改。如果这是您的问题域,那么您正在寻找 Azure 数据工厂或找到 SQL Server 2000 的副本并使用 DTS。等等等等