【问题标题】:Unsigned Integer to signed Integer in SSISSSIS中的无符号整数到有符号整数
【发布时间】:2013-08-29 18:23:41
【问题描述】:

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

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

先谢谢你了。 奥伦。

【问题讨论】:

  • 双击您的平面文件连接管理器。单击“预览”按钮,可能位于选项卡上(不记得了)。查看正在预览的实际数据——它看起来“正确”吗?我经常在处理平面文件时遇到问题,因为我会偏离一两个字节,这取决于 unix 与 windows 的行尾,所以当我预览我的数据时,它有一个层形状。您的数据是否以这种方式显示?

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


【解决方案1】:

在您的导入过程中有几件事情可能会出错。首先你必须知道你的原始文件的编码:

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

       (DT_I4) REPLACE(character_expression,searchstring,replacementstring)
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2010-09-19
      • 2013-10-02
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      • 2015-02-17
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      相关资源
      最近更新 更多