2017-08-30 110 views
-1

是否可以編寫使用位於不同服務器上的不同數據庫中的表的查詢?使用位於不同服務器上的兩個數據庫中的兩個表的寫入查詢

我有table_1這在數據庫中存在「DB1」 Server1上並沒有存在於Server2上數據庫「DB2」另一個表table_2

我該怎麼做? 服務器可以是MySQL,HSQL或MS-SQL中的任何一種。這是主要的問題.........有沒有不同的服務器,但也是不同類型的服務器。

請問sp_addlinkedserver是否適合這種情況?

+2

[SQL Server中選擇從兩個不同的服務器數據]的可能的複製(https://stackoverflow.com/questions/1144051/selecting-data-from-two-different-servers-in-sql-server ) –

回答

0

在MS SQL服務器上設置linked servers。然後,你可以查詢兩臺服務器像

SELECT * FROM [server1的]。[數據庫]。[DBO]。[表]

SELECT * FROM [服務器2]。[數據庫]。 [表]

或使用OPENQUERY(可能是首選的原因這只是發送命令到其它服務器而不是源服務器試圖解析它)

+0

當兩臺服務器都是不同的類型時,這也可以工作嗎?例如,一個是hsql和其他MySQL的? – caesar

+0

它會工作是(特別是如果您使用OPENQUERY),但是爲了創建鏈接服務器,您可能需要將其他服務器類型的驅動程序安裝到SQL服務器上。這裏是如何爲MySQL做到這一點的鏈接。 https://www.mssqltips.com/sqlservertip/4577/create-a-linked-server-to-mysql-from-sql-server/ –

+0

謝謝Element zero.i'll試試這個方法 – caesar

0

你需要使用的sp_addlinkedserver創建一個服務器鏈接。請參閱reference documentation的使用情況。一旦建立了服務器鏈接,就可以像平常一樣構建查詢,只需將數據庫名稱添加到其他服務器的前綴即可。即:

-- FROM DB1 
SELECT * 
FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1 
    INNER JOIN [DB2].[MyDatabaseOnDB2].[dbo].[MyOtherTable] tab2 
     ON tab1.ID = tab2.ID 

一旦鏈路建立,還可以使用OPENQUERY到遠程服務器上執行SQL語句,只將數據傳送回給你。這可以更快一點,並且它可以讓遠程服務器優化您的查詢。如果您在上面的示例中將數據緩存在DB1上的臨時(或內存中)表中,那麼您將能夠查詢它,就像加入標準表一樣。例如:

-- Fetch data from the other database server 
SELECT * 
INTO #myTempTable 
FROM OPENQUERY([DB2], 'SELECT * FROM [MyDatabaseOnDB2].[dbo].[MyOtherTable]') 

-- Now I can join my temp table to see the data 
SELECT * FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1 
    INNER JOIN #myTempTable tab2 ON tab1.ID = tab2.ID 

查看OPENQUERY的文檔以查看更多示例。上面的例子很有意思。我肯定會在這個特定的例子中使用第一種方法,但使用OPENQUERY的第二個選項可以節省一些時間和性能,如果您使用查詢來過濾掉一些數據。

0

以下查詢將會有所幫助。

SELECT TS1.COLUMN01, TS2.COLUMN02 
FROM Server1.DBName..TableName TS1, Server2.DBName..TableName TS2 
WHERE TS1.COLUMN03 = TS2.COLUMN03 
+0

DBName後面有2個小點在查詢中? – caesar

+0

是的,否則它會給錯誤消息像無效的對象名稱。 –

相關問題