sp_addlinkedserver (Transact-SQL)

更新 : 2006 年 12 月 12 日

リンク サーバーを作成します。リンク サーバーを使用すると、OLE DB データ ソースに対する異種の分散クエリの利用が可能になります。sp_addlinkedserver を使用してリンク サーバーを作成したら、このサーバーに対して分散クエリを実行できます。リンク サーバーを SQL Server インスタンスとして定義した場合は、リモート ストアド プロシージャを実行できます。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

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

引数

  • [ @server= ] 'server'
    作成するリンク サーバーの名前を指定します。server のデータ型は sysname で、既定値はありません。
  • [ @srvproduct= ] 'product_name'
    リンク サーバーとして追加する OLE DB データ ソースの製品名を指定します。product_name のデータ型は nvarchar(128) で、既定値は NULL です。SQL Server の場合、provider_namedata_sourcelocationprovider_string、および catalog は指定する必要はありません。
  • [ @provider= ] 'provider_name'
    このデータ ソースに対応する OLE DB プロバイダの一意なプログラム識別子 (PROGID) を指定します。provider_name は、現在のコンピュータにインストールされている指定の OLE DB プロバイダに対して一意にする必要があります。provider_name のデータ型は nvarchar(128) で、既定値は NULL です。ただし、provider_name を省略した場合は、SQLNCLI が使用されます。SQLNCLI は SQL Native Client OLE DB プロバイダです。OLE DB プロバイダは、指定の PROGID を使用してレジストリに登録されることになっています。
  • [ @datasrc= ] 'data_source'
    OLE DB プロバイダで認識されるデータ ソースの名前を指定します。data_source のデータ型は nvarchar(4000) です。data_source は DBPROP_INIT_DATASOURCE プロパティとして渡され、OLE DB プロバイダの初期化に使用されます。
  • [ @location= ] 'location'
    OLE DB プロバイダで認識されるデータベースの場所を指定します。location のデータ型は nvarchar(4000) で、既定値は NULL です。location は DBPROP_INIT_LOCATION プロパティとして渡され、OLE DB プロバイダの初期化に使用されます。
  • [ @provstr= ] 'provider_string'
    一意なデータ ソースを識別する、OLE DB プロバイダ固有の接続文字列を指定します。provider_string のデータ型は nvarchar(4000) で、既定値は NULL です。provstr は、IDataInitialize に渡されるか、DBPROP_INIT_PROVIDERSTRING プロパティとして設定され、OLE DB プロバイダの初期化に使用されます。

    リンク サーバーを SQL Native Client OLE DB プロバイダに対して作成するときは、SERVER キーワードを使用して、SERVER=servername\instancename の形式で SQL Server インスタンスを指定できます。servername は SQL Server が実行されているコンピュータの名前、instancename はユーザーが接続する SQL Server インスタンスの名前です。

    ms190479.note(ja-jp,SQL.90).gifメモ :
    ミラー化されたデータベースにアクセスするには、接続文字列にデータベース名を含める必要があります。この名前は、データ アクセス プロバイダがフェールオーバーを試行できるようにするために必要です。データベースは、@provstr パラメータまたは @catalog パラメータで指定できます。必要に応じて、接続文字列でフェールオーバー パートナー名も指定できます。詳細については、「データベース ミラーリング セッションへの最初の接続」を参照してください。
  • [ @catalog= ] 'catalog'
    OLE DB プロバイダに接続するときに使用するカタログを指定します。catalog のデータ型は sysname で、既定値は NULL です。catalog は DBPROP_INIT_CATALOG プロパティとして渡され、OLE DB プロバイダの初期化に使用されます。リンク サーバーを SQL Server インスタンスに対して定義する場合、カタログは、リンク サーバーがマップされる既定のデータベースを参照します。

結果セット

なし

解説

次の表は、OLE DB を介してアクセスできるデータ ソース用にリンク サーバーを設定する方法です。1 つのデータ ソースには複数の方法でリンク サーバーを設定できます。したがって、1 つのデータ ソース型に複数の行が対応している場合もあります。この表には、リンク サーバーの設定に使用する sp_addlinkedserver のパラメータ値も記載されています。

リモート OLE DB データ ソース OLE DB プロバイダ product_name provider_name data_source location provider_string catalog

SQL Server

Microsoft SQL Native Client OLE DB プロバイダ

SQL Server 1 (既定値)

 

 

 

 

 

SQL Server

Microsoft SQL Native Client OLE DB プロバイダ

 

SQLNCLI

SQL Server のネットワーク名 (既定のインスタンスの場合)

 

 

データベース名 (省略可能)

SQL Server

Microsoft SQL Native Client OLE DB プロバイダ

 

SQLNCLI

servername\instancename (特定のインスタンスの場合)

 

 

データベース名 (省略可能)

Oracle

Microsoft OLE DB Provider for Oracle

任意2

MSDAORA

Oracle データベースの SQL*Net 別名

 

 

 

Oracle、バージョン 8 以降

Oracle Provider for OLE DB

任意

OraOLEDB.Oracle

Oracle データベースに対する別名

 

 

 

Access/Jet

Microsoft OLE DB Provider for Jet

任意

Microsoft.Jet.OLEDB.4.0

Jet データベース ファイルのフル パス

 

 

 

ODBC データ ソース

Microsoft OLE DB Provider for ODBC

任意

MSDASQL

ODBC データ ソースのシステム DSN

 

 

 

ODBC データ ソース

Microsoft OLE DB Provider for ODBC

任意

MSDASQL

 

 

ODBC 接続文字列

 

ファイル システム

Microsoft OLE DB Provider for Indexing Service

任意

MSIDXS

インデックス作成サービス カタログ名

 

 

 

Microsoft Excel スプレッドシート

Microsoft OLE DB Provider for Jet

任意

Microsoft.Jet.OLEDB.4.0

Excel ファイルのフル パス

 

Excel 5.0

 

IBM DB2 データベース

Microsoft OLE DB Provider for DB2

任意

DB2OLEDB

 

 

Microsoft OLE DB Provider for DB2 のマニュアルを参照

DB2 データベースのカタログ名

1 この方法でリンク サーバーを設定すると、リンク サーバーの名前は必ず SQL Server のリモート インスタンスのネットワーク名と同じになります。サーバーを指定するには、data_source を使用します。

2 "任意" は任意の製品名を指定できることを示します。

プロバイダ名を指定しない場合、または SQL Server をプロバイダ名として指定した場合、SQL Server 2005 では Microsoft SQL Native Client OLE DB プロバイダ (SQLNCLI) が使用されます。これより以前のプロバイダ名である SQLOLEDB を指定しても、カタログに保存されるときには SQLNCLI に変更されます。

data_sourcelocationprovider_string、および catalog パラメータによって、リンク サーバーがポイントするデータベースが特定されます。こららのいずれかのパラメータが NULL に設定されると、対応する OLE DB 初期化プロパティは設定されません。

クラスタ化された環境で OLE DB データ ソースを示すファイル名を指定する場合は、汎用名前付け規則 (UNC) による名前、または共有ドライブを使用して場所を指定します。

ユーザー定義のトランザクション内では、sp_addlinkedserver は実行できません。

ms190479.security(ja-jp,SQL.90).gifセキュリティ メモ :
sp_addlinkedserver を使用してリンク サーバーを作成すると、すべてのローカル ログインに対して既定の自己マッピングが追加されます。SQL Server 以外のプロバイダの場合、SQL Server 認証ログインは、SQL Server サービス アカウントでプロバイダにアクセスすることもできます。管理者は、sp_droplinkedsrvlogin <linkedserver_name>, NULL を使ってグローバル マッピングを削除することを検討してください。

権限

ALTER ANY LINKED SERVER 権限が必要です。

戻り値

0 (成功) または 1 (失敗)

A. Microsoft SQL Native Client OLE DB プロバイダを使用する

次の例では、SEATTLESales というリンク サーバーを作成します。製品名は SQL Server で、プロバイダ名は使用されません。

USE master;
GO
EXEC sp_addlinkedserver 
   'SEATTLESales',
   N'SQL Server'
GO

次の例では、SQL Native Client OLE DB プロバイダ (SQLNCLI) を使用して、SQL Server インスタンス上にリンク サーバー S1_instance1 を作成します。

EXEC sp_addlinkedserver   
   @server='S1_instance1', 
   @srvproduct='',
   @provider='SQLNCLI', 
   @datasrc='S1\instance1'

B. Microsoft OLE DB Provider for Jet を使用する

次の例では、SEATTLE Mktg というリンク サーバーを作成します。

ms190479.note(ja-jp,SQL.90).gifメモ :
この例では、Microsoft Access と Northwind データベースの両方がインストールされており、Northwind データベースが C:\Msoffice\Access\Samples にあることを前提としています。
EXEC sp_addlinkedserver 
   @server = 'SEATTLE Mktg', 
   @provider = 'Microsoft.Jet.OLEDB.4.0', 
   @srvproduct = 'OLE DB Provider for Jet',
   @datasrc = 'C:\MSOffice\Access\Samples\Northwind.mdb'
GO

C. Microsoft OLE DB Provider for Oracle を使用する

次の例では、Oracle データベースの SQL*Net 別名を MyServer とし、Microsoft OLE DB Provider for Oracle を使用する LONDON Mktg というリンク サーバーを作成します。

EXEC sp_addlinkedserver
   @server = 'LONDON Mktg',
   @srvproduct = 'Oracle',
   @provider = 'MSDAORA',
   @datasrc = 'MyServer'
GO

D. data_source パラメータを指定して Microsoft OLE DB Provider for ODBC を使用する

次の例では、Microsoft OLE DB Provider for ODBC (MSDASQL) と data_source パラメータを使用する、SEATTLE Payroll というリンク サーバーを作成します。

ms190479.note(ja-jp,SQL.90).gifメモ :
リンク サーバーを使用する前には、指定した ODBC データ ソース名をサーバーのシステム DSN として定義する必要があります。
EXEC sp_addlinkedserver 
   @server = 'SEATTLE Payroll', 
   @srvproduct = '',
   @provider = 'MSDASQL', 
   @datasrc = 'LocalServer'
GO

E. Excel スプレッドシートで Microsoft OLE DB Provider for Jet を使用する

Microsoft OLE DB Provider for Jet を使用して Excel スプレッドシートにアクセスするリンク サーバー定義を作成するには、まず、選択の対象となる Excel ワークシートの列と行を指定して、Excel の名前付き範囲を作成します。こうすると、分散クエリで範囲の名前をテーブル名として参照できるようになります。

EXEC sp_addlinkedserver 'ExcelSource',
   'Jet 4.0',
   'Microsoft.Jet.OLEDB.4.0',
   'c:\MyData\DistExcl.xls',
   NULL,
   'Excel 5.0'
GO

Excel のワークシートのデータにアクセスするには、セルの範囲を名前と関連付けます。先に設定したリンク サーバーを使って、テーブルとして指定されている名前付き範囲 SalesData にアクセスするときには、次のクエリを使用できます。

SELECT *
   FROM ExcelSource...SalesData
GO

リモート共有へのアクセスが許可されているドメイン アカウントで SQL Server が実行されている場合は、マップされたドライブの代わりに UNC パスを使用できます。

EXEC sp_addlinkedserver 'ExcelShare',
   'Jet 4.0',
   'Microsoft.Jet.OLEDB.4.0',
   '\\MyServer\MyShare\Spreadsheets\DistExcl.xls',
   NULL,
   'Excel 5.0'

F. Microsoft OLE DB Provider for Jet を使用してテキスト ファイルにアクセスする

次の例では、Access .mdb ファイル内のテーブルとしてテキスト ファイルにリンクするのではなく、直接テキスト ファイルにアクセスするリンク サーバーを作成します。プロバイダは Microsoft.Jet.OLEDB.4.0 で、プロバイダ文字列は Text です。

データ ソースは、テキスト ファイルが格納されているディレクトリのフル パスです。テキスト ファイルと同じディレクトリ内に、テキスト ファイルの構造を説明する schema.ini ファイルが存在している必要があります。schema.ini ファイルの作成方法の詳細については、Jet Database Engine のドキュメントを参照してください。

--Create a linked server.
EXEC sp_addlinkedserver txtsrv, 'Jet 4.0', 
   'Microsoft.Jet.OLEDB.4.0',
   'c:\data\distqry',
   NULL,
   'Text'
GO

--Set up login mappings.
EXEC sp_addlinkedsrvlogin txtsrv, FALSE, Admin, NULL
GO

--List the tables in the linked server.
EXEC sp_tables_ex txtsrv
GO

--Query one of the tables: file1#txt
--using a four-part name. 
SELECT * 
FROM txtsrv...[file1#txt]

G. Microsoft OLE DB Provider for DB2 を使用する

次の例では、Microsoft OLE DB Provider for DB2 を使用する DB2 というリンク サーバーを作成します。

EXEC sp_addlinkedserver
   @server='DB2',
   @srvproduct='Microsoft OLE DB Provider for DB2',
   @catalog='DB2',
   @provider='DB2OLEDB',
   @provstr='Initial Catalog=PUBS;
       Data Source=DB2;
       HostCCSID=1252;
       Network Address=XYZ;
       Network Port=50000;
       Package Collection=admin;
       Default Schema=admin;'

参照

関連項目

分散クエリのストアド プロシージャ (Transact-SQL)
sp_addlinkedsrvlogin (Transact-SQL)
sp_addserver (Transact-SQL)
sp_dropserver (Transact-SQL)
sp_serveroption (Transact-SQL)
sp_setnetname (Transact-SQL)
システム ストアド プロシージャ (Transact-SQL)
システム テーブル (Transact-SQL)

その他の技術情報

リンク サーバーの委任用の構成
SQL Server でテスト済みの OLE DB プロバイダ

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 12 月 12 日

新しい内容 :
  • @provstr の説明に注意書きを追加しました。