【问题标题】:Oracle nvarchar2(4000) column wont be imported into SQL Server 2008 R2Oracle nvarchar2(4000) 列不会导入 SQL Server 2008 R2
【发布时间】: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


【解决方案1】:

解决这个问题的方法是从 oracle 端只取一半的列长度。

如果 SQL 端列定义为NVARCHAR(MAX)(MAX 为 4000),那么您可以从 Oracle 端导入的最大长度是该值的一半。所以在 Oracle 专栏做SUBSTR(A.Column1,1,2000) 就变得很有必要了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-21
    • 2019-05-06
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 2015-03-19
    相关资源
    最近更新 更多