2017-08-30 10 views
-1

異なるサーバーにある異なるデータベースにあるテーブルを使用するクエリを記述できますか?異なるサーバー上の2つのデータベースにある2つのテーブルを使用するクエリを作成する

table_1はserver1のデータベース "db1"にあり、server2のデータベース "db2"には別のテーブルtable_2が存在します。

どうすればいいですか? サーバーは、MySQL、HSQL、またはMS-SQLのどれでもかまいません。これは主な質問です.........異なるサーバーと異なるタイプのサーバーはありません。

sp_addlinkedserverはこのような場合に使用できますか?

+2

[SQL Serverで2つの異なるサーバーからのデータの選択]の可能複製(https://stackoverflow.com/questions/1144051/selecting-data-from-two-different-servers-in-sql-server ) –

答えて

0

MS SQLサーバーでlinked serversを設定します。次に、あなただけの[サーバー1]から[

*のように両方のサーバーを照会することができます。[データベース]。[DBO]。[テーブル]

と[サーバー2]から

選択*。[データベース]。 。[テーブル]

またはOPENQUERYを使用します(これはちょうどそれを解析しようとしてではなく、ソースサーバー以外のサーバーにコマンドを送信し、原因を好まれるかもしれない)

+0

これは、両方のサーバが異なるタイプの場合にも動作しますか?たとえば、hsqlと他のMySQLのどちらですか? – caesar

+0

リンクサーバーを作成するには、他のサーバーの種類のドライバをSQLサーバーにインストールする必要があるかもしれませんが、OPENQUERYを使用している場合は、はい(ESPECIALLY)が機能します。ここでは、MySQLのためにこれを行う方法に関するリンクです。 https://www.mssqltips.com/sqlservertip/4577/create-a-linked-server-to-mysql-from-sql-server/ –

+0

ありがとうございました。要素zero.iはこのアプローチを試してみます – 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 

たら、あなたはまた、リモートサーバー上のSQL文を実行するためにOPENQUERYを使用し、あなたに戻ってデータのみを転送することができます。これは少し速くすることができ、リモートサーバーがクエリを最適化できるようになります。上の例で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を使用する2番目のオプションでは、クエリを使用して一部のデータをフィルタリングすると時間とパフォーマンスを節約できます。

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

はい、それ以外の場合、無効なオブジェクト名のようなエラーメッセージが表示されます。 –

関連する問題