2016-05-24 268 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