我创建了一个SSIS包,因此我可以按预定的时间间隔从旧的FoxPro数据库导入数据。为多个客户安装了FoxPro数据库的副本。总体而言,该软件包运行良好,并完成了我所需要的一切。
但是,我有一个恼人的情况,其中至少有一个客户(可能更多)有一个修改过的FP数据库,他们增加了一个表中一列的长度。当我在这样的客户上运行包时,由于截断而失败。
我以为我可以给自己一些摆动空间并将长度从3改为10.这样,长度为10的突变体将被容纳,以及其他所有使用3的突变体。但是,SSIS在列时抱怨长度不匹配,期间。
我想我有几个选择:
答案 0 :(得分:0)
我在FoxPro方面很弱,但是......
您可以创建符合SSIS期望的临时表。创建一个使用FoxPro指令将数据从问题表复制到临时表的任务。改变您的数据流以使用临时表。
您可以创建预备步骤(创建临时表并转移到临时表)作为SSIS任务,以便流控制由您的SSIS包管理。
答案 1 :(得分:0)
如果您正在使用Visual FoxPro OleDB,并且您担心列宽,则可以在调用期间使用PADR()显式强制它们。我不知道这会影响多少表/查询,但可以保证您获得预期的字符列长度。如果处理数字,十进制,日期/时间,逻辑(布尔),应该不是问题...无论如何,你可以这样做你的选择来获取数据
select
t1.Fld1,
t1.Fld2,
padr( t1.CharFld3, 20 ) CharFld3,
padr( t1.CharFld4, 5 ) CharFld4,
t1.OtherFld5,
padr( t1.CharFld6, 35 ) CharFld5
from
YourTable t1
where
SomeCondition
这将强制基于字符的(隐含样本)字段“CharFld3”,“CharFld4”,“CharFld6”分别强制为20,5和35,而不管底层结构长度如何。现在,如果有人更新结构比你拥有的结构更长,它将被截断到适当的长度,但不会崩溃。此外,如果它们具有较短的列长度,它将通过PADR()函数(右键)填充到您指定的完整大小。