2010-10-12 58 views
2

我有一個內聯查詢,其中我有一個table1在server1和另一個table2在server2。 我需要連接這兩個表,並獲取數據。如何從兩個不同的sql服務器獲取數據?

我可以這樣做,如連接到一臺服務器,獲取數據並連接到下一臺服務器...獲取數據。 並加入它們。

但是還有沒有其他更好的方法。我聽說過關於鏈接服務器。這有幫助嗎?

在此先感謝!

+0

爲什麼社區wiki? – 2010-10-12 19:29:15

+0

我在不知不覺中點擊了它... wats:( – Relativity 2010-10-12 19:29:49

回答

5

是的,在一個服務器上建立一個鏈接服務器到另一個服務器。然後,您可以使用連接執行常規查詢。它看起來像這樣:

SELECT t1.Col1 
    , t2.ColA 
FROM server1Table t1 
INNER JOIN SERVER2.dbname.dbo.tableName t2 ON t1.TheId = t2.TheId 

這假定您正在運行Server1上的查詢。您也可以使用兩臺鏈接的服務器,並使用[servername]。[dbname]。[schema]。[table]來引用它們,然後像​​平常一樣在SQL中使用。

或者,您可以使用OPENROWSET(但如果您可以設置,鏈接的服務器是最容易的)。 OpenRowSets看起來像這樣:

SELECT t1.Col1 
    , t2.ColA 
FROM server1Table t1 
INNER JOIN OPENROWSET('SQLNCLI', 'Server=Server2;Trusted_Connection=yes;', 
         'SELECT t2.ColA, t2.TheId FROM dbname.dbo.tableName') AS t2 
    ON t1.TheId = t2.TheId 

然後你就可以加入'a',就好像它是本地表一樣。在這種情況下,它可能會將所有數據都拉到本地數據庫中,所以您應該考慮將WHERE添加到內部查詢以限制行,並且只獲取所需的列。

+0

有沒有其他的方式..我指的是鏈接服務器以外的其他方式:(我剛剛確認我們不能在我們公司使用lniked服務器。 – Relativity 2010-10-12 19:32:54

+0

您需要如果你還沒有這些權限,你可以使用一個有sysadmin或者setupadmin權限角色的服務器,並且把兩臺服務器都作爲鏈接服務器,然後在你自己的服務器上對這兩臺鏈接的服務器運行查詢不過看看錶現,我可以想象它變得毛茸茸的。 – Martijn 2010-10-12 19:37:12

+0

添加了OPENROWSET的描述。 – Rory 2010-10-12 22:07:24

相關問題