SQL Server へのリンクサーバ (Linked Server) の設定方法

SQL Server へのリンクサーバ (Linked Server) を作成する

このページでは SQL Server へのリンクサーバ (Linked Server) の設定方法をご紹介します。

リンクサーバ (Linked Server) の作り方

まず、リンクサーバ (Linked Server) を作るには、 sp_addlinkedserver というシステムストアードプロシジャーを使います。

sp_addlinkedserver の構文は以下の通りです。

sp_addlinkedserver
	[ @server= ] 'server'
	[ , [ @srvproduct= ] 'product_name' ] 
	[ , [ @provider= ] 'provider_name' ]
	[ , [ @datasrc= ] 'data_source' ] 
	[ , [ @location= ] 'location' ] 
	[ , [ @provstr= ] 'provider_string' ] 
	[ , [ @catalog= ] 'catalog' ] 

そして、sp_addlinkedsrvlogin システムストアードプロシジャーを使って、リンクサーバ (Linked Server) のセキュリティーアカウントと SQL Server のローカル インスタンスのログインのマッピングを作成します。

sp_addlinkedsrvlogin の構文は以下の通りです。

sp_addlinkedsrvlogin 
	[ @rmtsrvname = ] 'rmtsrvname' 
	[ , [ @useself = ] 'TRUE' | 'FALSE' | NULL ] 
	[ , [ @locallogin = ] 'locallogin' ] 
	[ , [ @rmtuser = ] 'rmtuser' ] 
	[ , [ @rmtpassword = ] 'rmtpassword' ] 

リンクサーバ (Linked Server) を作ってみよう

では、 LS1 というリンクサーバ (Linked Server) を作ってみましょう。

1. 以下の SQL 文を実行して、リンクサーバを作ります。

EXEC sp_addlinkedserver
       @server = 'LS1', --リンクサーバの名前
       @srvproduct = '',
       @provider = 'SQLNCLI', -- プロバイダーの名前
       @datasrc = '192.168.5.10'; -- ロケーション(IPアドレスやサーバ名)

SQL Server のリンクサーバ (Linked Server) を作る際には、プロバイダーを SQLNCLI を設定すると、自動的に一番新しい Server Native Client OLE DB Provider を選択してくれます。 ちなみにプロバイダーを省略しても SQLNCLI が使われます。

デフォルトインスタンスではない場合はロケーションに 192.168.5.10\[インスタンス名] のように指定すれば OK です。

2. 次に、SQL Server のローカル インスタンスのログインとリンクサーバ (Linked Server ) のマッピングを作成します。

SQL Server 認証の場合
EXEC sp_addlinkedsrvlogin
       @rmtsrvname = 'LS1', --リンクサーバの名前
       @useself = 'FALSE', --ログイン名とパスワードを送信する時は FALSE
       @locallogin = 'sa', -- ローカルサーバ上のログイン
       @rmtuser = 'sa', -- ログイン名
       @rmtpassword = 'testsa'; -- パスワード
Windows 認証の場合
EXEC sp_addlinkedsrvlogin
       @rmtsrvname = 'LS1',
       @useself = 'TRUE'; --ログイン自身の情報を使用する時はTRUE

Window 認証の場合は、ログインしているユーザが接続先の SQL Server へのアクセスが許可されていなければいけません。

リンクサーバ LS1 作成の結果

リンクサーバ (Linked Server) からテーブルの値を取得する

リンクサーバ (Linked Server) を介してテーブルから値を取得するには以下のようにクエリーを書きます。

SELECT * FROM [ リンクサーバ名 ].[ データベース名 ].[ スキーマ名 ].[ テーブル名 ]

例えば、リンクサーバ LS1 の TestDB という名前のデータベースの dbo スキーマの Students テーブルの値を取得するには以下のようになります。

SELECT   *
FROM     LS1.TestDB.dbo.Students;
リンクサーバ LS1 の Select の結果

リンクサーバ LS1 からデータが取得できましたね。

© 2010-2024 SQL Server 入門