SQL Server 2008加入Oracle 11g

SQL Server 2008加入Oracle 11g,sql,sql-server,sql-server-2008,join,oracle11g,Sql,Sql Server,Sql Server 2008,Join,Oracle11g,我已成功地将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 F

我已成功地将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设置/注册表中可能有某些内容…

您是否尝试过对表名使用别名?像这样

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

根据@shiva的有用建议,我用别名重新格式化了查询。这引发了一个服务器排序规则不匹配错误,这比我之前收到的“多部分标识符”消息更具启发性。结果表明,连接的列具有不同的排序规则(SQL\u Latin1\u General\u CP1\u CI\u AS与Latin1\u General\u CI\u AS)。作为查询的一部分,在联接的末尾添加一个简单的排序可以解决这个问题。

理论上,这可能不会影响它,但是您是否尝试过在查询中使用Oracle表的别名?您是否尝试过在SQL server端为Oracle表创建同义词?引用Oracle表的视图?谢谢Shiva。这让我找到了答案。