2017-08-07 177 views
0

我想从Oracle源加载数据到SQL Server数据库。其中一个被加载的列是串联的结果。有很多6000或7000个字符的值。目标表已设置为nvarchar(max),以便我们不会遇到任何截断问题。nvarchar(最大)导致错误

但是,当SSIS包运行时,它仍然失败,说结果字符串太长。我已经进入SSIS的高级编辑并明确将其更改为DT_NTEXT unicode textstream。它仍然失败。

请帮忙。

如果没有其他方法,我将截断值为4000个字符。

回答

2

我在过去面临同样的问题。不幸的是,由于驱动程序或SSIS的内部实现限制,它无法解决。基本上Oracle端的限制是8000个字符,它对应于4000个Unicode字符。转换为unicode发生在Oracle - > SQL Server路径的某处,无法避免。即使声明是双方简单的varchar。

+0

如何截断字符串,然后在ssis包中。有没有办法 – Photops

+0

最简单的方法是在数据源的SELECT中的相应列上使用substr函数。 –

1

如果@Milan.Švec是正确的,那么你只需要在盒子外面思考。

  • 你知道SSIS是挑剔
  • 甲骨文可能没有正确的驱动程序
  • 一个简单的文本/ CSV文件可以在(DT_NTEXT)从Oracle数据读取

1)推到csv文件上。

2)确保定义您的分隔符,以便双引号占据。

  • 这是至关重要的,你占了正确的分隔符
  • 使用的分隔符,以确保您的数据是正确的每一列内。天知道,当列被错误地推送到错误的行/列时,脏数据是多么令人沮丧。

3)如果需要,从你的SSIS包中读取上述csv文件到临时表中。

  • 否则,推到最后一桌并跳过步骤4.

4)运行转换操作,以保证您的数据和加载到决赛桌。

当然,还有其他一些方法可以做到这一点,但csv是通用的,至少是直接的。避免使用EXCEL文件,因为它们在某些版本中往往很麻烦。