更改十进制字段的精度会导致SSIS包失败

时间:2013-02-26 20:11:35

标签: sql-server sql-server-2008 ssis

我在Source表中有一个数据类型为decimal(10,2)的字段。 源字段正在其中一个SSIS包中的简单数据泵中使用,以将数据插入到具有精确数据类型的字段的另一个表中。 最近,源表和目标表中的精度变为18,使数据类型为十进制(18,2)。

软件包在服务器上开始出现故障并出现以下错误:

  

描述:输出“OLE DB源输出”(11)上的输出列“RunningTotal”(20)出错。返回的列状态为:“转换失败,因为数据值溢出指定的类型。”

当我进入DataPump中OLE DB源的高级编辑器时,我发现输出列仍然显示10的旧精度。

这是否意味着,只要更改精度而不是整个数据类型发生此类更改,就需要手动更新包并将其推送到服务器? 或者包有一种方法可以自动识别这些类型的更改吗?

非常感谢大家的帮助。

1 个答案:

答案 0 :(得分:3)

是的,您需要在每次更改源时手动更新元数据。避免手动刷新的唯一方法是明确定义要使用的元数据,这意味着您的查询中有很多convert

例如,改变:

select id
  from mytable

进入:

select convert(int, id) as id
  from mytable

因此,当数据类型从int更改为bigint时,您无需更新元数据。请注意,它可能会失败,因为bigint值大于SSIS中的int大小!