2012-07-31 95 views
19

我对SSIS比较陌生。我想从使用Microsoft OLEDB Oracle数据库为Oracle提取信息,我使用此查询:SSIS - 由于潜在的数据丢失,无法转换该值

SELECT ID FROM Test 

我得到一个错误消息说:the value cannot be converted because of a potential loss of data。如果我改变查询以下然后它的作品:

SELECT '1' FROM Test 

我认为这是失败,因为该ID不是一个整数。但是,平面文件连接管理器显示OutputColumnWidth是50.我做错了什么?

更新北京时间16:30
我已经研究过这多一点,它似乎是有“频率”或“无”所造成的问题的直方图列。那些具有“身高平衡”的直方图看起来没问题。

+0

Test表中'ID'的数据类型是什么? – billinkc 2012-07-31 14:49:48

+0

@ billinkc,它似乎是:字符串[DT_STR] – w0051977 2012-07-31 15:06:58

+0

@billinkc,我编辑了这个问题。请看一看。 – w0051977 2012-07-31 15:31:00

回答

31

这是一件很平常的事情。在很多情况下,从其他类型的系统(其中列的元数据无法确定)导入ssis的默认设置是str(50)。由于您试图将其推入一个字符列,因此它会假定您可能会丢失数据。只需进入右击并选择源组件“显示高级编辑器...”

然后导航到最后一个选项卡(输入输出特性)

点击+旁边的OLE DB源输出

点击+旁边的输出列

高亮ID列

滚动到长度数据类型属性在对话框的右侧,并从50更改为1

+1

感谢此+1。解决办法与你说的完全相反,即改变1到50(你指出我在正确的方向)。我假设你说50变为1,因为你认为它是一个整数类型? - 它实际上是一个字符串类型。我注意到一些输出列有错误的数据类型,例如一个字符串的四字节有符号整数。你能解释为什么在我接受你的答案之前发生这种情况吗? – w0051977 2012-07-31 19:54:33

+0

我认为它是1,因为你说它适用于'1'我最初认为这个错误是在你将下一步移动到一个更小的目标字段的导入数据。这里的描述指向实际导入时元数据错误。您是否使用与Oracle数据库处于同一级别的Oracle驱动程序?AlwaysUseDefaultCodePage标志的状态是什么(请参阅我的答案:http://stackoverflow.com/a/8697899/236348)? – 2012-07-31 20:23:56

+1

谢谢。在写问题之前,我已经根据你的链接设置了AlwaysUseDefaultCodePage标志。 “元数据错误”和“同一级别”是什么意思? – w0051977 2012-07-31 20:40:41