2011-03-25 40 views

回答

5

是的,只要你有權限。如果您有Linked Server設置,您也可以執行跨服務器。

跨數據庫實例:

SELECT * FROM localTable as lt 
INNER JOIN otherDB.dbo.OtherTable as ot 
ON lt.ID = ot.id 

跨服務器爲例(假設您已經創建了鏈接服務器):

SELECT * FROM localTable as lt 
INNER JOIN ServerName.otherDB.dbo.OtherTable as ot 
ON lt.ID = ot.id 
+0

hrm,好吧。數據庫位於不同的服務器上,我沒有鏈接的服務器。我想我不能那麼做。 – Tony 2011-03-25 18:29:49

+2

@Tony如果你的數據存在於不同的服務器上,那麼你將不得不建立一個鏈接服務器或移動數據。對您的環境一無所知,但我們有一套工作,每天晚上將一小部分倉庫數據複製到應用程序服務器,以便我們可以訪問我們所有的公共數據(客戶端列表等)。應用程序,而不必重新鍵入事物或將所有地方的服務器連接起來。我們使用SSIS來移動數據。 – Rozwel 2011-03-25 18:41:04

+0

啊,好的。謝謝。感謝大家。 – Tony 2011-03-25 18:42:25

3

是的。只需使用3部分命名語法database_name.schema_name.table_name即可。

您還需要啓用跨數據庫所有權鏈接。 (不推薦)或使用this approach.

1

使用完全限定的表名。例如,如果你在數據庫基礎知識,並希望訪問數據庫XYZ表的表,訪問它XYZ.dbo.table (這可能是DBO或別的東西取決於表的所有者,通常是DBO)

+0

應該注意,從SQL Server 2005以來,架構和所有者並不是一回事。在我們的許多應用數據庫中,我們使用架構來區分用戶數據和應用程序元數據。在我們的倉庫環境中,我們使用模式來識別相關的表/過程,以便我們可以輕鬆地將安全性應用於對象組。我很少看到他們用來識別物體所有者。 – Rozwel 2011-03-25 18:24:58

1

試試像下面這樣:

SELECT a.userID, b.usersFirstName 
FROM databaseA.dbo.TableA a 
INNER JOIN database B.dbo.TableB b ON a.userID = b.userID 

來源:http://forums.asp.net/t/1254974.aspx

+0

如果您發佈代碼,XML或數據樣本,**請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼示例」按鈕(「{}」)以精確格式化並語法突出顯示它!如果您發佈錯誤消息,請**使用blockquotes('「')正確格式化錯誤消息。 – 2011-03-25 18:25:33

0

另外一個技術,在某些環境中更好地工作是定義一個同義詞遠程表。這可以讓你有一個指向遠程對象的本地引用。如果您處於必須遷移事物的環境中,並且從一個環境到另一個環境的相對位置可能不一樣,那麼此功能尤其有用。這裏有一個快速概覽:

http://blog.sqlauthority.com/2008/01/07/sql-server-2005-introduction-and-explanation-to-synonym-helpful-t-sql-feature-for-developer/

相關問題