sp_addlinkedserver (Transact-SQL)
リンク サーバーを作成します。リンク サーバーを使用すると、OLE DB データ ソースに対する異種の分散クエリの利用が可能になります。sp_addlinkedserver を使用してリンク サーバーを作成したら、このサーバーに対して分散クエリを実行できます。リンク サーバーを SQL Server インスタンスとして定義した場合は、リモート ストアド プロシージャを実行できます。
構文
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 |
MicrosoftSQL Server Native Client OLE DB プロバイダー |
SQL Server1 (既定) |
|
|
|
|
|
SQL Server |
MicrosoftSQL Server Native Client OLE DB プロバイダー |
|
SQLNCLI |
SQL Server のネットワーク名 (既定のインスタンスの場合) |
|
|
データベース名 (省略可能) |
SQL Server |
MicrosoftSQL Server 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 では MicrosoftSQL 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
'SEATTLESales',
N'SQL Server'
GO
次の例では、SQL Server Native Client OLE DB プロバイダーを使用して、SQL Server インスタンス上にリンク サーバー S1_instance1 を作成します。
EXEC sp_addlinkedserver
@server='S1_instance1',
@srvproduct='',
@provider='SQLNCLI',
@datasrc='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 = 'SEATTLE Mktg',
@provider = 'Microsoft.Jet.OLEDB.4.0',
@srvproduct = 'OLE DB Provider for Jet',
@datasrc = '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 = 'SEATTLE Mktg',
@provider = 'Microsoft.ACE.OLEDB.12.0',
@srvproduct = 'OLE DB Provider for ACE',
@datasrc = 'C:\MSOffice\Access\Samples\Northwind.accdb'
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 というリンク サーバーを作成します。
注意 |
---|
リンク サーバーを使用する前には、指定した ODBC データ ソース名をサーバーのシステム DSN として定義する必要があります。 |
EXEC sp_addlinkedserver
@server = 'SEATTLE Payroll',
@srvproduct = '',
@provider = 'MSDASQL',
@datasrc = 'LocalServer'
GO
E. 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='EXCEL 12.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;'
関連項目