无符号整数到SSIS中的已签名整数

时间:2013-08-27 06:03:00

标签: ssis integer signed type-conversion flat-file

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

有人认出这种格式吗? 如果这样做,我如何将其加载到正确的数据类型?

先谢谢你。 奥伦。

2 个答案:

答案 0 :(得分:0)

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

   (DT_I4) REPLACE(character_expression,searchstring,replacementstring)

希望它有所帮助。

答案 1 :(得分:0)

导入时可能会出现一些问题。首先,您必须知道原始文件的编码:

How can I detect the encoding/codepage of a text file

编码将确定char的实际大小(以字节为单位),更重要的是确定每个字符的存储方式。你看,一个包含4个字符的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 复选框以设置/或选择“代码页”。然后将该列的值加载到一个字符串(正确的编码)中,而不是一个unsigned int。

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

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