2012-03-19 72 views
0

我必須參加從多個數據庫查詢,類似的查詢:如何使從多個數據庫

SELECT T1.*, T2.* FROM DatabaseA.dbo.Table1 AS T1 
INNER JOIN DatabaseB.dbo.Table2 AS T2 ON T1.ID = T2.ID 

我的問題:

  • 我應該如何設置的System.Data.SqlClient.SqlConnection連接字符串?我應該省略還是留空Initial Catalog?我應該把它設置爲DatabaseA
  • 這是執行此任務的好方法嗎?我正在考慮準備第三個沒有表格的數據庫,但是用這個視圖SELECT(我不能在現有的數據庫中放置一個視圖)。查詢通常在10/15秒內執行,但用戶必須等待,所以即使少了幾秒鐘,也不會感激。

所有數據庫共享相同的登錄憑證。

回答

2

這取決於您的連接字符串中的登錄超過Initial Catalog

只要您使用的登錄名具有從兩個數據庫中的兩個表中查詢所需的權限,就可以在連接字符串中指定任一數據庫。

橫跨多個數據庫的查詢沒有任何內在錯誤,所以您提出的解決方案對我來說看起來不錯。

請注意,如果您是設計這些數據庫的人,並確定哪些數據表應存在於哪些數據庫中,那麼跨數據庫沒有參照完整性,那麼理想情況下任何相互關聯的表都應該存在於單一數據庫。

+0

是的,所有數據庫共享相同的登錄憑據。你認爲使用第三個數據庫有更好的視角(用於性能和設計)嗎? (查詢通常在10/15秒內執行,但用戶必須等待,因此即使少數幾秒鐘也不會被理解)。 – 2012-03-19 15:43:12

+1

我不會建議創建第三個數據庫以僅包含視圖...每個創建的數據庫都有管理開銷,所以您應該儘可能地限制它。我會嘗試獲得在任一現有數據庫中創建視圖的權限......但是,除非您計劃對視圖建立索引,否則我認爲這不會提高查詢的性能。 – 2012-03-19 15:45:47

+0

不幸的是,表格是相關的,但法律規定將它們分割到多個數據庫中(我感到很幸運,它們至少在同一臺服務器上)。視圖將被編入索引,但我會等待幾個月的反饋來調整它。謝謝,我想這就是全部! – 2012-03-19 15:56:50

1

無論數據庫如何,連接字符串都以用戶名的權限連接到數據庫。如果用戶有權執行查詢,則根本沒有問題。

1

初始目錄將是您在不使用DBNAME.dbo.TABLENAME的情況下查詢的目錄。 所以,如果你選擇DatabaseA作爲初始目錄,你可以查詢這樣的:

SELECT T1.*, T2.* 
FROM Table1 AS T1 
INNER JOIN DatabaseB.dbo.Table2 AS T2 ON T1.ID = T2.ID 

的初始目錄只是意味着默認的數據庫。

如果登錄可以訪問這兩個數據庫,則在使用全名時,哪一個是默認設置並不重要。

性能: 10/15秒聽起來很長時間。您應該能夠通過使用索引或更好的查詢設計來改進查詢並將其降低。然而,製作意見不會改善延誤。 如果您需要幫助,請提供更多詳細信息。

相關問題