2016-09-28 94 views
0

我得到不一致的结果,从加入链接服务器。这应该是相对简单的事......但花了我数小时才弄清楚了这一点。我正在使用SQL Server 2014和CData ODBC驱动程序加入SalesForce。我没有做任何事情只是试图执行标准的CRUD操作,但似乎一次又一次地过滤这些链接的服务器表,有时结果不会产生。SQL服务器到Salesforce链接服务器噩梦

我目前主要的问题,现在的问题是我有困难连接两个链接表在两个本地表。如果我从连接中删除一个链接表,则会生成结果。但是,无论何时将两个链接表添加到它生成的连接和空记录集中。

而且是所有相关的标识符存在,所以它确实是与链接服务器的问题。以下是我已经尝试了三种变化:

SELECT * FROM Offer_Interest oi 
INNER JOIN Offer o ON oi.Offer_ID_SQL = o.Offer_ID_SQL 
INNER JOIN OPENQUERY([TR-SF-PROD], 'SELECT Id, OFFER_ID_SQL__C FROM Offer__c') osf ON o.Offer_ID_SQL =osf.OFFER_ID_SQL__C 
INNER JOIN Interest i ON oi.Interest_ID_SQL = i.Interest_ID_SQL 
INNER JOIN OPENQUERY([TR-SF-PROD], 'SELECT INTEREST_ID_SQL__C, Id FROM Interest__c') isf ON i.Interest_ID_SQL =isf.Interest_ID_SQL__c 
WHERE o.PrimaryContact_ID_SQL = 2803 

我也试过不OPENQUERY:

SELECT * FROM FROM Offer_Interest oi 
INNER JOIN Offer o ON oi.Offer_ID_SQL = o.Offer_ID_SQL 
INNER JOIN [TR-SF-PROD].[CDataSalesforce].[Salesforce].[Offer__c] osf ON o.Offer_ID_SQL =osf.OFFER_ID_SQL__C 
INNER JOIN Interest i ON oi.Interest_ID_SQL = i.Interest_ID_SQL 
INNER JOIN [TR-SF-PROD].[CDataSalesforce].[Salesforce].[Interest__c] isf ON i.Interest_ID_SQL =isf.Interest_ID_SQL__c 
WHERE o.PrimaryContact_ID_SQL = 2803 

,最后我还创建了同义词到链接服务器表。所有这些工作使用相同的过滤器或WHERE CLAUSE,如果我单独运行它们,尽管如果我没有OPENQUERY过滤它们,链接的服务器表似乎有错误。

这是我的链接服务器到SQL Server第一次经历这样,在这个或经历什么人的问题可能将不胜​​感激!

+0

你是说如果你只加入一个链接的服务器表,不管它是哪一个,你会得到结果但添加另一个返回0结果?这是真的,当你删除where子句? – scsimon

+0

@scsimon是的,如果我删除一个链接表(一个或另一个交替),那么没有结果产生。有或没有过滤器。 –

+0

当连接到链接的服务器表时,不会产生任何结果...您是否确定应该根据连接条件得到结果。即您确定没有归类问题,和/或数据是否存在于条件中? – scsimon

回答

0

不是我希望,因为它应该只是工作的答案。但我想到的一个临时解决方案是将我需要的链接服务器值填充到临时表中,然后加入临时表,这些表工作正常......但这当然会增加整个存储过程的执行时间,所以它绝对不是理想的解决方案。如果有人有更好的主意,请仍然回答!

IF EXISTS(SELECT [NAME] FROM tempdb.sys.tables WHERE [NAME] like '#TempOffer%') BEGIN 
    DROP TABLE #TempOffer; 
END; 
SELECT * INTO #TempOffer FROM OPENQUERY([TR-SF-PROD], 'SELECT Id, OFFER_ID_SQL__C FROM Offer__c') 

IF EXISTS(SELECT [NAME] FROM tempdb.sys.tables WHERE [NAME] like '#TempInterest%') BEGIN 
    DROP TABLE #TempInterest; 
END; 
SELECT * INTO #TempInterest FROM OPENQUERY([TR-SF-PROD], 'SELECT INTEREST_ID_SQL__C, Id FROM Interest__c') 

SELECT * FROM Offer_Interest oi 
INNER JOIN Offer o ON oi.Offer_ID_SQL = o.Offer_ID_SQL 
INNER JOIN #TempOffer osf ON o.Offer_ID_SQL =osf.OFFER_ID_SQL__C 
INNER JOIN Interest i ON oi.Interest_ID_SQL = i.Interest_ID_SQL 
INNER JOIN #TempInterest isf ON i.Interest_ID_SQL =isf.Interest_ID_SQL__c 
WHERE o.PrimaryContact_ID_SQL = 2803