ストアドプロシージャで異なるサーバーのテーブルを結合する方法はありますか?
詳細がなければ、直接例を示すことは困難ですが、基本的な考え方は次のとおりです。
まず、ストアドプロシージャの外で、ホストサーバー(ストアドプロシージャが存在するサーバー)は、(場合によっては)ログイン情報を含めて、2番目のサーバーについて知る必要があります。
メインサーバーで、sp_addlinkedserverストアドプロシージャを実行します。これは一度だけ行う必要があります:
exec sp_addlinkedserver @server=’(your second server)‘;
Ifこの2番目のサーバーにログイン情報を提供する必要があります(たとえば、プロセスは、最初のデータベース接続で使用されるのと同じ資格情報でログインできない)、sp_addlinkedsrvloginストアドプロシージャを使用してログインします:
exec sp_addlinkedsrvlogin @rmtsrvname=’(your second server)‘,@useself=false, @rmtuser=’yourusername‘, @rmtpassword=’yourpassword‘;
次に、ストアドプロシージャで、2番目のサーバーのテーブルを指定できます。
SELECT table1.*
FROM table1
INNER JOIN [secondserver].[database].[schema].[table] AS table2 ON
table1.joinfield = table2.joinfield
1。exec sp_helpserver
を使用しているリンクサーバーがあるかどうかを確認します
2。サーバーが返されない場合はLinked
ではなく、追加する必要があります。 それ以外の場合は、手順3に進みます
Sql Server 2008 R2の場合は、Server Object > Linked Servers > Add new Linked Server
に移動します
または
exec sp_addlinkedserver @server='ServerName';
。セカンダリサーバーに次のように接続します...
exec sp_addlinkedsrvlogin
@rmtsrvname='ServerName'
, @useself=false
, @rmtuser='user'
, @rmtpassword='Password';
4。これで、2つの異なるサーバーのテーブルを結合できます。
SELECT
SRV1.*
FROM
DB1.database_name.dbo.table_name SRV1
INNER JOIN DB2.database_name.dbo.table_name SRV2
ON SRV1.columnId = SRV2.columnId
GO
テーブルに参加する前に、まず2つのサーバーをリンクする必要があります。それらがリンクされたら、以下のクエリを使用して、サーバー、データベース、テーブルの名前を置き換えることができます。
以下のSQLをDB2で実行することを忘れないでください。
EXEC sp_addlinkedserver DB1
GO
-- below statement connects sa account of DB2 to DB1
EXEC sp_addlinkedsrvlogin @rmtsrvname = 'DB1', @useself = 'false', @locallogin = 'sa', @rmtuser = 'sa', @rmtpassword = 'DB1 sa pwd'
GO
SELECT a.columns
FROM DB1.database_name.dbo.table_name a
INNER JOIN DB2.database_name.dbo.table_name b
ON a.columnId = b.columnId
GO
サーバーのリンク- http://msdn.Microsoft.com/en-us/library/ms188279.aspx
以下の構文でクエリを記述して、SQL Serverの他のサーバーに参加できます。
SELECT table_1.*
FROM [Database_1].[dbo].[Table_1] table_1
INNER JOIN [IP_OF_SERVER_2].[Database_2].[dbo].[Table_2] table_2 ON table_1.tablekey COLLATE DATABASE_DEFAULT = table_2.tablekey COLLATE DATABASE_DEFAULT
p/s:エンコードするCOLLATE DATABASE_DEFAULT、ベローズエラーの防止等しい操作での「Vietnamese_CI_AS」と「SQL_Latin1_General_CP1_CI_AS」の間の照合の競合を解決できません。