sp_addlinkedserver (Transact-SQL)

リンク サーバーを作成します。リンク サーバーを使用すると、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_name、data_source、location、provider_string、および catalog は指定する必要はありません。

  • [ **@provider=** ] 'provider_name'
    このデータ ソースに対応する OLE DB プロバイダーの一意なプログラム識別子 (PROGID) を指定します。provider_name は、現在のコンピューターにインストールされている指定の OLE DB プロバイダーに対して一意にする必要があります。provider_name のデータ型は nvarchar(128) で、既定値は NULL です。ただし、provider_name を省略した場合は、SQLNCLI が使用されます (SQLNCLI を使用すると、SQL Server により最新バージョンの SQL Server 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 Server Native Client OLE DB プロバイダーに対して作成するときは、SERVER キーワードを使用して、SERVER=servername\instancename の形式で SQL Server インスタンスを指定できます。servername は SQL Server が実行されているコンピューターの名前、instancename はユーザーが接続する SQL Server インスタンスの名前です。

    注意

    ミラー化されたデータベースにアクセスするには、接続文字列にデータベース名を含める必要があります。この名前は、データ アクセス プロバイダーがフェールオーバーを試行できるようにするために必要です。データベースは、@provstr パラメーターまたは @catalog パラメーターで指定できます。必要に応じて、接続文字列でフェールオーバー パートナー名も指定できます。詳細については、「データベース ミラーリング セッションへの最初の接続」を参照してください。

  • [ **@catalog=** ] 'catalog'
    OLE DB プロバイダーに接続するときに使用するカタログを指定します。catalog のデータ型は sysname で、既定値は NULL です。catalog は DBPROP_INIT_CATALOG プロパティとして渡され、OLE DB プロバイダーの初期化に使用されます。リンク サーバーを SQL Server インスタンスに対して定義する場合、カタログは、リンク サーバーがマップされる既定のデータベースを参照します。

リターン コード値

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

結果セット

なし

説明

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

リモート OLE DB データ ソース

OLE DB プロバイダー

product_name

provider_name

data_source

location

provider_string

catalog

SQL Server

Microsoft SQL Server Native Client OLE DB プロバイダー

SQL Server1 (既定値)

 

 

 

 

 

SQL Server

Microsoft SQL Server Native Client OLE DB プロバイダー

 

SQLNCLI

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

 

 

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

SQL Server

Microsoft SQL Server Native Client OLE DB プロバイダー

 

SQLNCLI

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

 

 

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

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 では Microsoft SQL Server Native Client OLE DB プロバイダーが使用されます。これより以前のプロバイダー名である SQLOLEDB を指定しても、カタログに保存されるときには SQLNCLI に変更されます。

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

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

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

セキュリティに関する注意セキュリティに関する注意

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

権限

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

使用例

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

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

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

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

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

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

Microsoft.Jet.OLEDB.4.0 プロバイダーは、2002-2003 形式を使用する Microsoft Access データベースに接続します。次の例では、SEATTLE Mktg というリンク サーバーを作成します。

注意

この例では、Microsoft Access と Northwind データベースの両方がインストールされており、Northwind データベースが C:\Msoffice\Access\Samples にあることを前提としています。

EXEC sp_addlinkedserver 
   @server = N'SEATTLE Mktg', 
   @provider = N'Microsoft.Jet.OLEDB.4.0', 
   @srvproduct = N'OLE DB Provider for Jet',
   @datasrc = N'C:\MSOffice\Access\Samples\Northwind.mdb';
GO

Microsoft.ACE.OLEDB.12.0 プロバイダーは、2007 形式を使用する Microsoft Access データベースに接続します。次の例では、SEATTLE Mktg というリンク サーバーを作成します。

注意

この例では、Microsoft Access と Northwind データベースの両方がインストールされており、Northwind データベースが C:\Msoffice\Access\Samples にあることを前提としています。

EXEC sp_addlinkedserver 
   @server = N'SEATTLE Mktg', 
   @provider = N'Microsoft.ACE.OLEDB.12.0', 
   @srvproduct = N'OLE DB Provider for ACE',
   @datasrc = N'C:\MSOffice\Access\Samples\Northwind.accdb';
GO

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

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

注意

リンク サーバーを使用する前には、指定した ODBC データ ソース名をサーバーのシステム DSN として定義する必要があります。

EXEC sp_addlinkedserver 
   @server = N'SEATTLE Payroll', 
   @srvproduct = N'',
   @provider = N'MSDASQL', 
   @datasrc = N'LocalServer';
GO

D. Excel スプレッドシート用の Microsoft OLE DB Provider を使用する

Microsoft OLE DB Provider for Jet を使用して 1997-2003 形式の 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';

Excel 2007 形式の Excel スプレッドシートに接続するには、ACE プロバイダーを使用します。

EXEC sp_addlinkedserver @server = N'ExcelDataSource', 
@srvproduct=N'ExcelData', @provider=N'Microsoft.ACE.OLEDB.12.0', 
@datasrc=N'C:\DataFolder\People.xlsx',
@provstr=N'EXCEL 12.0' ;

E. 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, N'Jet 4.0', 
   N'Microsoft.Jet.OLEDB.4.0',
   N'c:\data\distqry',
   NULL,
   N'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];

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

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

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