回答:
探しているのはリンクサーバーです。オブジェクトエクスプローラーのツリーの次の場所からSSMSでそれらにアクセスできます。
Server Objects-->Linked Servers
または、sp_addlinkedserverを使用できます。
設定する必要があるのは1つだけです。それができたら、他のサーバーのテーブルを次のように呼び出すことができます。
select
*
from
LocalTable,
[OtherServerName].[OtherDB].[dbo].[OtherTable]
所有者は常にdbo
であるとは限らないため、使用するスキーマに必ず置き換えてください。
[OtherServerName].[OtherDB]..[OtherTable]
、わかっている場合はそれを含めるのが最善です。
リンクサーバーを使用して実行できます。
通常、リンクサーバーは、データベースエンジンがSQL Serverの別のインスタンス、またはOracleなどの別のデータベース製品のテーブルを含むTransact-SQLステートメントを実行できるように構成されています。Microsoft AccessやExcelなど、多くの種類のOLE DBデータソースをリンクサーバーとして構成できます。
リンクサーバーには次の利点があります。
リンクサーバーの詳細については、こちらをご覧ください。
サーバーオブジェクト->リンクサーバー->新しいリンクサーバー
リモートサーバー名を指定します。
リモートサーバーの種類(SQLサーバーまたはその他)を選択します。
[セキュリティ]-> [このセキュリティコンテキストを使用して作成]を選択し、リモートサーバーのログインとパスワードを入力します。
[OK]をクリックすると完了です。
リンクサーバーを作成するための簡単なチュートリアルを次に示します。
または
クエリを使用してリンクサーバーを追加できます。
構文:
sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ]
[ , [ @provider= ] 'provider_name' ]
[ , [ @datasrc= ] 'data_source' ]
[ , [ @location= ] 'location' ]
[ , [ @provstr= ] 'provider_string' ]
[ , [ @catalog= ] 'catalog' ]
リンクサーバーは一度だけ作成する必要があります。リンクサーバーを作成したら、次のようにクエリを実行できます。
select * from LinkedServerName.DatabaseName.OwnerName.TableName
SELECT
*
FROM
[SERVER2NAME].[THEDB].[THEOWNER].[THETABLE]
リンクサーバーの使用についても確認できます。リンクサーバーは、DB2プラットフォームなど、他の種類のデータソースにもなります。これは、SQL Server TSQLまたはSproc呼び出しからDB2にアクセスしようとする1つの方法です...
Could not find server '88.208.229.164' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.servers.
2つの異なるデータベースにわたるクエリは、分散クエリです。ここにいくつかのテクニックと長所と短所のリストがあります:
これらはすべてすばらしい答えですが、これは欠落しており、独自の強力な用途があります。おそらくそれはOPが望んだものに適合しないかもしれませんが、質問は曖昧であり、私は他の人がここで彼らのやり方を見つけるかもしれないと感じています。基本的に、1つのウィンドウを使用して複数のサーバーに対してクエリを同時に実行できます。方法は次のとおりです。
SSMSで登録済みサーバーを開き、ローカルサーバーグループの下に新しいサーバーグループを作成します。
このグループの下に、クエリを実行するサーバーごとに新しいサーバー登録を作成します。DB名が異なる場合は、プロパティでそれぞれにデフォルトを設定してください。
最初のステップで作成したグループに戻り、右クリックして[新しいクエリ]を選択します。新しいクエリウィンドウが開き、実行したクエリはグループ内の各サーバーで実行されます。結果は、レコードがどのサーバーからのものかを示す追加の列名が付いた単一のデータセットで表示されます。ステータスバーを使用すると、サーバー名が複数に置き換えられます。
SQL_server 2008をリモートサーバーでホストされているSQL_server 2016に接続するときに同じ問題が発生しました。他の答えは私には簡単にうまくいきませんでした。他の誰かに役立つかもしれないと思うので、ここに私の微調整したソリューションを書きます。
リモートIPデータベース接続の拡張回答:
手順1:サーバーをリンクする
EXEC sp_addlinkedserver @server='SRV_NAME',
@srvproduct=N'',
@provider=N'SQLNCLI',
@datasrc=N'aaa.bbb.ccc.ddd';
EXEC sp_addlinkedsrvlogin 'SRV_NAME', 'false', NULL, 'your_remote_db_login_user', 'your_remote_db_login_password'
...ここSRV_NAME
で発明された名前です。これを使用して、クエリからリモートサーバーを参照します。aaa.bbb.ccc.ddd
SQLserver DBをホストしているリモートサーバーのIPアドレスです。
ステップ2:クエリを実行する たとえば、
SELECT * FROM [SRV_NAME].your_remote_db_name.dbo.your_table
...以上です!
あるサーバーから別のサーバーへのリンクサーバー定義を作成し(これを行うにはSAが必要です)、4部構成の名前でそれらを参照するだけです(BOLを参照)。
サーバー2008:
SSMSでserver1.DB1に接続して、次のことを試してください。
SELECT * FROM
[server2].[DB2].[dbo].[table1]
他の人が指摘したように、それが機能しない場合は、サーバーがリンクされていないことが原因です。
エラーが発生します:
sys.serversにサーバーDB2が見つかりませんでした。正しいサーバー名が指定されていることを確認してください。必要に応じて、ストアドプロシージャsp_addlinkedserverを実行して、サーバーをsys.serversに追加します。
サーバーを追加するには:
参照:sp_addlinkedserverリンクを使用してサーバーを追加するには[1]:sp_addlinkedserverを使用してサーバーを追加するには
sys.serversの内容を確認するには、クエリを実行します。
SELECT * FROM [sys].[servers]
@ Super9がデータプロバイダーSQLOLEDBでSQL Server認証を使用するOPENDATASOURCEについて語ったように 。1つのテーブルのコードスニペットが、現在コードが実行されている現在のサーバーデータベースにあり、別のテーブルが他のサーバー'192.166.41.123'にあることをここに投稿しています。
SELECT top 2 * from dbo.tblHamdoonSoft tbl1 inner JOIN
OpenDataSource('SQLOLEDB','Data Source=192.166.41.123;User ID=sa;Password=hamdoonsoft')
.[TestDatabase].[dbo].[tblHamdoonSoft1] tbl2 on tbl1.id = tbl2.id
これは古い質問であることは知っていますが、同義語を使用しています。おそらくクエリはデータベースサーバーA内で実行され、サーバーAに存在しないデータベースサーバーB内のテーブルを検索します。次に、サーバーBからテーブルを呼び出すデータベースにシノニムを追加します。クエリは、スキーマまたは異なるデータベース名を含め、通常どおりにテーブル名を呼び出すだけで機能します。
同義語は一種のリンクなので、サーバーをリンクする必要はありません。
リンクサーバーを追加するための簡素化されたソリューション
最初のサーバー
EXEC sp_addlinkedserver @server='ip,port\instancename'
2回目のログイン
EXEC sp_addlinkedsrvlogin 'ip,port\instancename', 'false', NULL, 'remote_db_loginname', 'remote_db_pass'
リンクされたローカルデータベースからクエリを実行する
INSERT INTO Tbl (Col1, Col2, Col3)
SELECT Col1, Col2, Col3
FROM [ip,port\instancename].[linkedDBName].[linkedTblSchema].[linkedTblName]