我想从Oracle源加载数据到SQL Server数据库。其中一个被加载的列是串联的结果。有很多6000或7000个字符的值。目标表已设置为nvarchar(max)
,以便我们不会遇到任何截断问题。nvarchar(最大)导致错误
但是,当SSIS包运行时,它仍然失败,说结果字符串太长。我已经进入SSIS的高级编辑并明确将其更改为DT_NTEXT unicode textstream
。它仍然失败。
请帮忙。
如果没有其他方法,我将截断值为4000个字符。
我想从Oracle源加载数据到SQL Server数据库。其中一个被加载的列是串联的结果。有很多6000或7000个字符的值。目标表已设置为nvarchar(max)
,以便我们不会遇到任何截断问题。nvarchar(最大)导致错误
但是,当SSIS包运行时,它仍然失败,说结果字符串太长。我已经进入SSIS的高级编辑并明确将其更改为DT_NTEXT unicode textstream
。它仍然失败。
请帮忙。
如果没有其他方法,我将截断值为4000个字符。
我在过去面临同样的问题。不幸的是,由于驱动程序或SSIS的内部实现限制,它无法解决。基本上Oracle端的限制是8000个字符,它对应于4000个Unicode字符。转换为unicode发生在Oracle - > SQL Server路径的某处,无法避免。即使声明是双方简单的varchar。
如果@Milan.Švec是正确的,那么你只需要在盒子外面思考。
1)推到csv文件上。
2)确保定义您的分隔符,以便双引号占据。
3)如果需要,从你的SSIS包中读取上述csv文件到临时表中。
4)运行转换操作,以保证您的数据和加载到决赛桌。
当然,还有其他一些方法可以做到这一点,但csv是通用的,至少是直接的。避免使用EXCEL文件,因为它们在某些版本中往往很麻烦。
我想我找到了答案。它在oracle中的CLOB函数是 。如果我不定义任何XMLElements,我可以通过SSIS绕过4000个字符的限制。
如何截断字符串,然后在ssis包中。有没有办法 – Photops
最简单的方法是在数据源的SELECT中的相应列上使用substr函数。 –