我在Source表中有一个数据类型为decimal(10,2)的字段。 源字段正在其中一个SSIS包中的简单数据泵中使用,以将数据插入到具有精确数据类型的字段的另一个表中。 最近,源表和目标表中的精度变为18,使数据类型为十进制(18,2)。
软件包在服务器上开始出现故障并出现以下错误:
描述:输出“OLE DB源输出”(11)上的输出列“RunningTotal”(20)出错。返回的列状态为:“转换失败,因为数据值溢出指定的类型。”
当我进入DataPump中OLE DB源的高级编辑器时,我发现输出列仍然显示10的旧精度。
这是否意味着,只要更改精度而不是整个数据类型发生此类更改,就需要手动更新包并将其推送到服务器? 或者包有一种方法可以自动识别这些类型的更改吗?
非常感谢大家的帮助。
答案 0 :(得分:3)
是的,您需要在每次更改源时手动更新元数据。避免手动刷新的唯一方法是明确定义要使用的元数据,这意味着您的查询中有很多convert
。
例如,改变:
select id
from mytable
进入:
select convert(int, id) as id
from mytable
因此,当数据类型从int更改为bigint时,您无需更新元数据。请注意,它可能会失败,因为bigint值大于SSIS中的int大小!