我有一个SSIS包,可以从平面文件中进行简单读取并插入到SQL Server 2005中。它在一台计算机(计算机1)上正常运行,源和目标都指向本地。
然后包被移动到另一台计算机(计算机2),同样一切指向本地,并开始失败。经过一段时间的研究后,结果发现目标表的列在两台机器上的顺序不同。包失败了,因为它试图将数据写入错误的表列。也就是说,在计算机1上,列是A,B,C,在计算机2上,它们是C,A,B - 包正试图将A的数据写入计算机2上的C等。
我在这里遗漏了什么吗?在写入OLE DB目标而不是列名时,SSIS是否真的依赖于列顺序?或者我的设置不好?
答案 0 :(得分:2)
SSIS从连接中读取元数据并将其与映射一起存储。有时它可以检测到更改并且会给出验证错误(在这种情况下,程序包将在验证时失败,您将不得不更改程序包以纠正问题)。如果打开包装,有时可以在设计器中看到这一点,它将提供更正列。
在某些情况下,它不会在验证阶段检测到更改,并且在插入过程中会失败。
所以我的问题是,在验证或后期执行阶段失败了吗?
答案 1 :(得分:0)
使用Oracle作为源或目标时也是如此。它不会在执行期间检测列更改和faling。每次更改列顺序或添加新列时,我都会更新数据流任务。
答案 2 :(得分:-1)
您是否检查了数据流任务中的列映射?有时映射会消失或指向错误的列。在您的情况下,移动SSIS包,然后很可能映射已损坏。我认为你只需要更正映射,它应该是一个修复。