Sql server 导致错误的nvarchar(最大值)

Sql server 导致错误的nvarchar(最大值),sql-server,oracle,ssis,Sql Server,Oracle,Ssis,我正在尝试将数据从Oracle源加载到SQL Server数据库中。正在加载的列之一是连接的结果。有许多值的长度为6000或7000个字符。目标表已设置为nvarchar(max),因此我们不会遇到任何截断问题 但是,当SSIS包运行时,仍然无法指出结果字符串太长。我进入了SSIS中的高级编辑器,并显式地将其更改为DT_NTEXT unicode textstream。它仍然失败 请帮忙 如果没有其他方法,我将把值截断为4000个字符 我过去也遇到过同样的问题。不幸的是,由于驱动程序或SSI的内

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

但是,当SSIS包运行时,仍然无法指出结果字符串太长。我进入了SSIS中的高级编辑器,并显式地将其更改为
DT_NTEXT unicode textstream
。它仍然失败

请帮忙


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

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

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

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

  • 你知道SSIS很挑剔
  • Oracle可能没有正确的驱动程序
  • 可以读入一个简单的文本/csv文件(DT_NTEXT)
1) 将数据从Oracle推送到csv文件中

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

  • 说明正确的分隔符至关重要
  • 使用分隔符确保您的数据正确地位于每列中。天知道当列被错误地推到错误的行/列时,脏数据会多么令人沮丧
3) 如果需要,从SSIS包中,将所述csv文件读取到暂存表中

  • 否则,推到最终表格并跳过步骤4
4) 运行转换操作以保证数据并加载到最终表中


当然,还有其他几种方法可以做到这一点,但csv是通用的,至少是简单明了的。避免使用EXCEL文件,因为在某些版本中,EXCEL文件往往有很多缺陷

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

  • 你知道SSIS很挑剔
  • Oracle可能没有正确的驱动程序
  • 可以读入一个简单的文本/csv文件(DT_NTEXT)
1) 将数据从Oracle推送到csv文件中

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

  • 说明正确的分隔符至关重要
  • 使用分隔符确保您的数据正确地位于每列中。天知道当列被错误地推到错误的行/列时,脏数据会多么令人沮丧
3) 如果需要,从SSIS包中,将所述csv文件读取到暂存表中

  • 否则,推到最终表格并跳过步骤4
4) 运行转换操作以保证数据并加载到最终表中

当然,还有其他几种方法可以做到这一点,但csv是通用的,至少是简单明了的。避免使用EXCEL文件,因为在某些版本中,EXCEL文件往往有很多缺陷

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

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


如何截断ssis包中的字符串。最简单的方法是在数据源的
SELECT
中的相应列上使用
substr
函数。如何截断ssis包中的字符串。最简单的方法是在数据源的
SELECT
中的相应列上使用
substr
函数。