2

我从管道分隔文件中提取并插入到 SQL Server 2008 R2 数据库表中。我的整数列之一在它进入表时不包含正确的值。

我可以在我的第一个对象(平面文件源)之后立即将数据查看器添加到数据流中,并将数据与在记事本中打开的源文件并排比较。我的字符串列都可以,但是这些唯一的七位整数被三个值之一替换(但原始文件中有 16K 唯一行)。新值看起来像它们正在替换的值,相同的格式和范围,但它们不会出现在源文件中。它们实际上看起来好像被缓存在某个地方。

更多信息:源中的外部列是 50 字符字符串,输出列是 4 字节 int。文件源的连接字符串由一个表达式设置,该表达式基于一个早期脚本设置的变量,该脚本在导入目录中查找候选文件。之前或之后没有其他任务可以转换或以其他方式修改数据;这个包纯粹是另一个处理数据的过程的提取过程。被替换的值不会出现在包文件的 XML 中(我搜索了它以防我们留下了一些与数据混淆的旧代码)。

我可以重新创建任务,一切似乎都可以正常工作,但我没有看到可以解释这一点的属性有任何差异,然后我担心它会再次中断。我真的很想了解这里出了什么问题。

有什么想法可以“破坏”这样的数据吗?

4

2 回答 2

1

这听起来可能是代码页问题。我建议2个选项

  1. 将连接管理器中的数据类型从 char 50 更改为 integer
  2. 为什么不将它作为原始的 50 字符字符串导入,然后通过数据转换转换运行它。
于 2012-11-08T19:19:49.270 回答
0

抱歉我不能早点回复。我尝试了源和外部数据类型的各种组合以及转换,但没有成功。有时该列只是空的或我提到的三个垃圾值之一。有趣的是,经过一番挖掘,一位同事注意到这三个十六进制值是 4d0000、4e0000 和 4f0000。不知道该读什么,但值本身似乎没有多大意义,某种颜色代码;我希望它们是一个秘密的错误代码。无论如何,似乎有效的是完全删除该列并将它们添加回 8 字节整数(外部和输出)。我会在接下来的几天里再次检查它并研究代码页的想法,如果我发现任何其他内容,我会更新这个问题。谢谢!

于 2012-11-09T22:52:44.843 回答