0

我有一个 SSIS 包,它应该从平面文件 (txt) 中获取数据。其中一个字段应该是无符号整数,我应该将其加载到 SQL 表中。在“平面文件连接管理器编辑器”中,我将平面文件的“格式”设置为固定宽度(没有任何分隔符,只有一个具有列长度的规范文件。我正在谈论的字段应该是 4 个字符长(根据到定义)。但在某些值中,我在第 4 个字符上得到“}”符号,例如:“010}”我信任定义并尝试将此值加载到无符号整数中,但没有运气。

有人认识这种格式吗?如果你这样做,我怎样才能将它加载到正确的数据类型中?

谢谢你。奥伦。

4

2 回答 2

0

如果我理解你的问题是正确的。其中一种方法是使用“派生列转换”。选择在其中添加一个新列。
如果您要获取的数据是 DT_WSTR 数据类型,您可以使用以下表达式将 '}' 去掉 ''。然后根据要加载的字段键入 cast it。这里我使用 (DT_I4) 然后将新列映射到目标。

   (DT_I4) REPLACE(character_expression,searchstring,replacementstring)

希望能帮助到你。

于 2013-08-27T09:00:57.077 回答
0

您的导入有几件事可能会出错。首先,您必须知道原始文件的编码:

如何检测文本文件的编码/代码页

编码将确定 char 的实际大小(以字节为单位),更重要的是每个字符的存储方式。您会看到,四个字符的 unicode 字符串可以是 4 个字节到 16 个字节(如果您有复合字符,可能更多),具体取决于编码。int 通常是四个字节(DT_I 4),但 ssis 最多为您提供 32 个字节(我认为)。因此,当您将未知数量的字节加载到预定的 unsigned int 中时,某些内容可能会被截断,最终得到垃圾值。

如果您不知道或找不到编码,我会假设它是 UTF-8,但这确实不是一个好习惯。这是关于它的一点点:http ://en.wikipedia.org/wiki/UTF-8 您还可以查看不同编码的 unicode 字符集(UTF-8、UTF-16 ..)并查看对于“}”字符及其匹配值。这可能会提示您为什么会出现它。

然后你的平面文件源应该匹配那种类型的编码。选中(或取消选中)Unicode复选框以设置它/或选择“代码页”。然后将该列的值加载到一个字符串(正确的编码)中,而不是一个无符号整数。

最后,当您知道自己拥有正确的值时,您可以使用“数据转换”将其转换为无符号整数或其他任何东西。

编辑: “数据转换”将根据其名称转换您导入的值。这可能不起作用,具体取决于原始文件的编写方式。“派生列”转换将是您的另一个选项,它不会更改实际值,只需告诉编译器将这些位解释为另一种类型(无符号整数)。

于 2013-08-27T10:03:29.513 回答