【问题标题】:SQL Server 2008 JOIN with Oracle 11gSQL Server 2008 加入 Oracle 11g
【发布时间】:2014-07-17 23:57:40
【问题描述】:

我已经成功地将一个 Oracle 11g 数据库链接到 SQL Server 2008。我可以在 SQL Server 中运行一个显示 Oracle 数据的简单查询:

SELECT PRODUCT_CODE
FROM [ORACLE-LINK]..ORACLE_SCHEMA.PRODUCTS_TABLE

这完全符合我的预期。

当我尝试做一个简单的连接时,问题就来了:

SELECT ProductName, [ORACLE-LINK]..ORACLE_SCHEMA.PRODUCTS_TABLE.PRODUCT_NAME
FROM SqlServer_table
INNER JOIN [ORACLE-LINK]..ORACLE_SCHEMA.PRODUCTS_TABLE
ON SqlServer_table.Product_ID=[ORACLE-LINK]..ORACLE_SCHEMA.PRODUCTS_TABLE.PRODUCT_CODE

这会导致 JOIN 语句的 Oracle 部分出现“无法绑定多部分标识符”错误。我从研究中知道语法必须准确,而且我想我已经尝试了几乎所有的排列。也许 SQL Server 设置/注册表中有一些东西...

【问题讨论】:

  • 理论上应该不会影响它,但是您是否尝试过在查询中对 Oracle 表进行别名处理?您是否尝试过在 SQL 服务器端为 Oracle 表创建同义词?引用 Oracle 表的视图?

标签: sql sql-server sql-server-2008 join oracle11g


【解决方案1】:

您是否尝试过为表名设置别名?像这样

SELECT SqlSvr.ProductName AS Sql_ProductName
    , Orcl.PRODUCT_NAME AS Orcl_ProductName
FROM SqlServer_table AS SqlSvr
  INNER JOIN [ORACLE-LINK]..ORACLE_SCHEMA.PRODUCTS_TABLE AS Orcl
  ON SqlSvr.Product_ID = Orcl.PRODUCT_CODE

【讨论】:

  • 谢谢湿婆。这让我找到了答案。
【解决方案2】:

按照@shiva 的有用建议,我用别名重新格式化了查询。这引发了服务器排序不匹配错误,事实证明这比我之前收到的“多部分标识符”消息更具启发性。事实证明,连接的列有不同的排序规则(SQL_Latin1_General_CP1_CI_AS vs Latin1_General_CI_AS)。在查询的 JOIN AS 部分的末尾添加一个简单的 COLLATE 可以解决此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    相关资源
    最近更新 更多