nvarchar(max)导致错误

时间:2017-08-07 02:53:53

标签: sql-server oracle ssis

我正在尝试将数据从Oracle源加载到SQL Server数据库中。正在加载的列之一是串联的结果。有很多值,长度为6000或7000个字符。目标表已设置为nvarchar(max),因此我们不会遇到任何截断问题。

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

请帮忙。

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

  • 你知道SSIS很挑剔
  • Oracle可能没有合适的驱动程序
  • 可以读入简单的text / csv文件(DT_NTEXT)

1)从Oracle推送数据到csv文件。

2)确保定义分隔符,以便考虑双引号。

  • 您必须考虑正确的分隔符
  • 使用分隔符确保数据在每列内正确。天文知道当列被错误地推送到错误的行/列时,脏数据会有多么令人沮丧。

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

  • 否则,请前往决赛桌并跳过第4步。

4)运行Transformation操作以保证您的数据和Load进入最终表。

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

答案 2 :(得分:0)

我想我找到了答案。 它是oracle中的CLOB函数。如果我没有定义任何XMLElements,我可以通过SSIS绕过4000字符限制。

http://www.sqlines.com/oracle/datatypes/clob