【发布时间】:2013-12-14 19:45:08
【问题描述】:
我正在尝试在 SQL Server 2008 R2 上运行它。
SELECT * FROM
OPENQUERY(linked_oracle_server, 'SELECT A.Column1, A.Column2 from A')
这以前可以工作。当 Oracle 端的 A.Column1 更改为 nvarchar2(4000) 时,我们开始面临这个问题。
现在它失败并出现以下错误:
无法为 OLE DB 提供程序“OraOLEDB.Oracle”创建列访问器 对于“linked_oracle_server”
我玩了一会儿,如果我这样做 SUBSTR(A.Column1,1,2000) 它可以工作!如果我将其更改为SUBSTR(A.Column1,1,2001),则会出现与上述相同的错误。这是否与NVARCHAR 在 SQL Server 端的最大限制为 4000 有关?有没有办法导入大于NVARCHAR2(2000) 的Oracle 列,即使NVARCHAR(MAX) 能够在SQL Server 上支持更大的数据?
【问题讨论】:
-
请运行此查询:
select table_name, column_name, data_length, char_col_decl_length, char_used from all_tab_columns where table_name = 'TABLENAME' and column_name = 'COLUMN1' ;其中TABLENAME是表的名称,COLUMN是该列的名称,并将结果粘贴到问题中。 -
这似乎不太可能,SQL Server 绝对可以处理超过 2000 个字符的 nvarchar 列。我确实发现了这个看似相关的错误:social.msdn.microsoft.com/Forums/sqlserver/en-US/…。您可能想尝试的另一件事是隔离问题。因此,只需在 Oracle 中创建一个包含单个
nvarchar2(4000)列的表,然后尝试从中进行选择。 -
@kordinko: DATA_LENGTH 4000, CHAR_COL_DECL_LENGTH 4000, CHAR_USED C. 这就是我得到的。
-
@Milimetric:A.Column1 是 nvarchar2(4000)。我知道问题是由于这个问题,正如我在描述中所说,如果我 SUBSTR 列,它工作正常。
-
这并不一定意味着列长是问题所在。可能是其他事情。我认为这是Oracle驱动程序中的错误。我对此只有一点经验,但我发现了许多不同的版本,而旧版本通常存在非常明显的问题。
标签: sql oracle sql-server-2008-r2 openquery