【问题标题】:Incorrect External column length in SSIS OLE DB DestinationSSIS OLE DB 目标中的外部列长度不正确
【发布时间】:2016-11-29 16:45:51
【问题描述】:

我正在将一组数据写入 SSIS (Visual Studio 2008) 中的 SQL Server 2008 表。当我将数据集映射到 OLE DB 目标时,出现截断错误,因为 OLE DB 目标列的长度为 20。每列都会发生这种情况,但我只会在下面显示一列的示例。

这是 SQL 表定义中的列:

Column_name     Type        Length
FLAGVOEMPLOYEE  nvarchar    40

这是我作为输入传递到目的地的列的元数据(在数据路径编辑器中检查):

Name            Data Type   Length
FlagVoEmployee  DT_WSTR     40

这是高级编辑器>输入和输出属性>OLE DB目标输入>外部列中的列属性

Name            DataType                    Length
FLAGVOEMPLOYEE  Unicode string [DT_WSTR]    20

我试过了:

  • 手动更改长度属性,但会自动恢复到20
  • 删除路径并重新创建
  • 删除 OLE DB 目标并重新创建它
  • 将数据访问模式更改为正常或快速加载
  • 取消映射列并重新映射它

我迷路了,因为我不知道如何更改任何其他可能帮助我避免截断的属性

【问题讨论】:

    标签: ssis oledb etl


    【解决方案1】:

    您是否先创建了 SSIS 部分,然后再更改 SQL 表中列的大小?如果是这样,您也许可以删除并重新创建 OLE DB 源以重置元数据。

    我也找到了这个链接:http://www.sqlservercentral.com/Forums/Topic927634-364-1.aspx

    当使用 SSIS 并更改源或目标元数据时,SSIS 不会重置元数据,它会删除更改的列并在列表末尾添加一个新列。这会导致在发生几次更改后包变得凌乱。

    要重置数据源的元数据,请将源更改为没有匹配列名的表或查询,然后查看数据源中的列。这将删除并重新创建元数据。然后将源切换回您尝试为其刷新元数据并再次查看列的更改源。这将完全重新创建源的元数据。

    对于目标,将目标更改为没有匹配列名的目标,然后查看映射的列。这将删除并重新创建元数据。然后切换回新的或更改的目标并查看映射的列。这有效地重置了元数据。

    【讨论】:

    • 您好,感谢您的回答,但是没有,我之后没有修改SQL表。不过,输入数据流的元数据似乎是正确的。
    • 您是否删除并重新创建了源并且它没有效果?您是在源代码中使用 SQL 语句还是只是从下拉列表中选择的表?
    • 我同时使用表和 SQL 语句,因为我稍后会加入它们。我没有尝试重新创建它们。即使我进入 OLE DB 目标的数据是正确的,您是否建议这样做?
    • 我找到了一个包含更多信息的链接并将其附加到答案中。如果这些都没有帮助,我会尝试删除并重新创建源和目标以重置元数据。
    • 您好,尝试了您编辑的方法,但不幸的是它没有解决问题:/
    【解决方案2】:

    要强制它提供 40 个字符的列,请使用派生列转换并将您的表达式修改为:

    (DT_WSTR, 40)[FLAGVOEMPLOYEE]

    我希望这会有所帮助,如果有帮助,请标记我的答案,以便它也可以使其他人受益!

    【讨论】:

      猜你喜欢
      • 2022-06-11
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多