2016-05-24 331 views
0

我一直在这个问题上搜索2天没有运气,所以我想现在是时候提出一个问题;我知道这已经被问过,但是我没有发现能够解决我的问题。我有两个来自两个不同数据库连接的表,我想要执行连接。到目前为止,我有:SQL连接来自多个数据库连接的多个表

$conn1 = odbc_connect("db-1","user","pass") 
     or die ("Couldn't Connect to Server"); 

$conn2 = odbc_connect("db-2","user","pass") 
     or die ("Couldn't Connect to Server"); 

$Query = 'SELECT PV_Job1.PlantCode, 
     PV_Job1.JobCode, 
     PV_Jobline1.JobLineNum, 
     PV_Jobline1.ItemCode, 
     PM_Item1.ItemShortDesc 

FROM VISION.PUB.PV_Job PV_Job1 

LEFT OUTER JOIN spec.public.specification specification 
    ON PV_JobLine1.ItemCode=specification.customer_item_code 

LEFT OUTER JOIN VISION.PUB.PV_Jobline PV_Jobline1 
    ON (PV_Job1.CompNum=PV_JobLine1.CompNum 
    AND PV_Job1.PlantCode=PV_JobLine1.PlantCode) 
    AND PV_Job1.JobCode=PV_JobLine1.JobCode'; 

$Result = odbc_exec($conn1,$Query); 

其中引发错误。这个问题的其他答案建议使用类似server1.database1.dbo.table1的东西,但是在这种情况下server1和database1会是什么?我对SQL很陌生,我从来没有做过这样的事情。我也尝试创建一个没有工作的链接服务器。

回答

0

我没有在你的代码中使用连接2.

为了简便见,让我们专注于这个代码在您的SQL Server。打开SQL Server Management Studio并连接到您的数据库。

要写这个查询,你需要一个链接服务器。您应该可以在Management Studio中创建它。您需要db-2数据库上的用户,然后您可以在db-1上创建使用该用户凭据登录的链接服务器。当您通过链接服务器运行查询时,它将使用此用户的凭据,因此请使确定它在链接数据库上具有db_datareader权限级别。

在你的问题中,你说它不起作用。我们需要您尝试使用链接服务器时看到的错误。

server1.database1.dbo.table1是对链接服务器的引用。当您使用名称的第四部分server1时,您指的是到您的链接服务器的连接。

+0

我在第一次连接中使用它。 “spec”是第二个数据库中的一个对象。不幸的是,我没有访问SQL服务器本身。这也意味着我无法访问错误日志。所以做这项工作的唯一方法是如果我在SQL Server Management中创建一个链接? – dyarbrough

+0

是的,如果我正确理解你的问题。我想澄清一件事:在SQL Server中,数据库托管在一个实例上。一个实例是连接到的内容,并从那里查询数据库。例如,服务器名称通常与实例名称相同,并且包含环境的名称,例如'SPECPROD'或'SPECDEV'。在'SPECDEV'中,你会有多个数据库,比如'spec_archive','spec'等等。你是否试图在一台服务器上跨多台服务器或跨数据库编写查询? –

+0

不完全确定,我的设置唯一的可视化在Crystal Reports中,在这里它们被列为两个单独的连接。即第一个是PostgreSpec-> spec-> public-> specification,第二个是Vision-LIVE-> VISION-> PUB-> PV_Job,PostgreSpec和Vision-LIVE是单独的连接。 – dyarbrough