简体   繁体   English

Oracle nvarchar2(4000)列将不会导入到SQL Server 2008 R2中

[英]Oracle nvarchar2(4000) column wont be imported into SQL Server 2008 R2

I am trying to run this on SQL Server 2008 R2. 我正在尝试在SQL Server 2008 R2上运行它。

SELECT * FROM 
OPENQUERY(linked_oracle_server, 'SELECT A.Column1, A.Column2 from A')

This used to work before. 这曾经工作过。 We started facing the problem when the A.Column1 was altered to nvarchar2(4000) on the Oracle side. 当在Oracle端将A.Column1更改为nvarchar2(4000)时,我们就开始面对问题。

Now it fails with the following error: 现在,它失败并显示以下错误:

Cannot create a column accessor for OLE DB provider "OraOLEDB.Oracle" for "linked_oracle_server" 无法为“ linked_oracle_server”的OLE DB提供程序“ OraOLEDB.Oracle”创建列访问器

I was playing around a bit, if I do SUBSTR(A.Column1,1,2000) it works! 我玩了一下,如果我执行SUBSTR(A.Column1,1,2000)它就可以了! And if I change it to SUBSTR(A.Column1,1,2001) it gives the same error as above. 如果我将其更改为SUBSTR(A.Column1,1,2001)则会出现与上述相同的错误。 Does this have to do with NVARCHAR having a maximum limit of 4000 on the SQL Server side? 这与在SQL Server端具有最大限制为4000的NVARCHAR有关吗? Is there no way to import an Oracle column of size greater then NVARCHAR2(2000) , even though NVARCHAR(MAX) is capable of supporting much bigger data on SQL Server? 即使NVARCHAR(MAX)能够在SQL Server上支持更大的数据,也无法导入大于NVARCHAR2(2000)的Oracle列吗?

The solution to this was to take only half the column length from the oracle side. 解决此问题的方法是仅从Oracle端获取一半的列长。

If the SQL side column is defined as NVARCHAR(MAX) (MAX being 4000), then the maximum length you can import from the Oracle side is half that. 如果将SQL端列定义为NVARCHAR(MAX) (MAX为4000),则可以从Oracle端导入的最大长度是该长度的一半。 So doing SUBSTR(A.Column1,1,2000) on the Oracle column becomes necessary! 因此,必须在Oracle列上执行SUBSTR(A.Column1,1,2000)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM