外部データのアクセス

OLE DB データ ソースのデータにアクセスするには、SQL Server に次の情報を指定する必要があります。

  • データ ソースを公開する OLE DB プロバイダの名前。

  • OLE DB プロバイダがデータのソースを探すために必要なすべての情報。

  • OLE DB データ ソースが行セットとして公開できるオブジェクトの名前、またはデータ ソースが行セットを公開するために OLE DB プロバイダに送信できるクエリ。行セットとして公開できるオブジェクトを、リモート テーブルと呼びます。行セットを生成するクエリを、パススルー クエリと呼びます。

  • 必要に応じて、OLE DB データ ソースの有効なログイン ID を SQL Server に指定できます。

SQL Server では、Transact-SQL ステートメントでの異種 OLE DB データ ソースを参照するための手段として、リンク サーバー名やアドホック コンピュータ名の使用がサポートされます。

リンク サーバー名

リンク サーバーは、OLE DB データ ソースへのアクセスに必要なすべての情報を持つ、SQL Server に対して定義された仮想サーバーです。リンク サーバー名は sp_addlinkedserver システム ストアド プロシージャを使用して定義します。リンク サーバー定義には、OLE DB データ ソースを探すのに必要なすべての情報が入っています。sp_addlinkedsrvlogin を使用して、SQL Server のローカル ログインをリンク サーバーのログインにマップします。

次のいずれかでリンク サーバー名を使用して、リモート テーブルを参照できます。

  • Transact-SQL ステートメントで、4 つの部分で構成される名前のテーブル参照やビュー参照内のサーバー名。他の 3 つの部分は、行セットとして公開されるリンク サーバー内のオブジェクトを参照します。

  • OPENQUERY 関数の入力パラメータ。OPENQUERY は実行するコマンドを OLE DB プロバイダに送信します。返された行セットを Transact-SQL ステートメントの中でテーブル参照またはビュー参照として使用できます。

詳細については、「リンク サーバー名の使用によるデータ ソースの識別」を参照してください。

アドホック名

アドホック名は、リンク サーバーとして定義されていない OLE DB データ ソースに対してあまり行わないクエリに使用されます。SQL Server では、OPENROWSET 関数と OPENDATASOURCE 関数は OLE DB データ ソースのデータにアクセスするための接続情報を提供します。

既定では、アドホック名はサポートされません。DisallowAdhocAccess プロバイダ オプションを 0 に設定し、Ad Hoc Distributed Queries 詳細構成オプションを有効にする必要があります。

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

アドホック名を使用できるようにすると、SQL Server に対して認証されているすべてのログインがプロバイダにアクセスできます。SQL Server の管理者は、ローカル ログインからアクセスされても安全で、信頼性の高いプロバイダにのみ、この機能を有効にする必要があります。

OPENROWSET と OPENDATASOURCE は、あまりアクセスされない OLE DB データ ソースを参照する目的にのみ使用してください。何度もアクセスするデータ ソースに対しては、リンク サーバーを定義してください。OPENDATASOURCE と OPENROWSET はどちらも、リンク サーバーの定義に関する機能が完全に提供されているわけではありません。これには、セキュリティ管理とカタログ情報のクエリを行う機能が含まれます。これらの関数が呼び出されるたびに、すべての接続情報をパスワードも含めて指定しなければなりません。

OPENROWSET と OPENDATASOURCE は関数のように見え、便宜上関数と呼ばれますが、OPENROWSET と OPENDATASOURCE はマクロなので、Transact-SQL 変数を引数として渡すことはできません。

OPENROWSET は、行セットを返すすべての OLE DB プロバイダと共に使用でき、Transact-SQL ステートメントでテーブル参照またはビュー参照が使用されるすべての場所で使用できます。OPENROWSET には次の情報を指定します。

  • OLE DB データ ソースに接続するために必要なすべての情報。

  • 行セットを生成するオブジェクトの名前、または行セットを生成するクエリ。

OPENDATASOURCE は、4 つの部分で構成されるオブジェクト名の一部として接続情報を提供します。この関数は、catalog**.schema.**object 表記を使用して複数の行セットを公開する OLE DB プロバイダのみをサポートします。OPENDATASOURCE は、Transact-SQL 構文内のリンク サーバー名を指定する位置で使用できます。OPENDATASOURCE には次の情報を指定します。

  • データ ソースのアクセスに使用される OLE DB プロバイダの PROGID として登録された名前。

  • OLE DB プロバイダに渡される各種の接続プロパティを指定する接続文字列。接続文字列の構文は、一連のキーワードと値の組み合わせから構成されます。基本的な構文は、Microsoft Data Access Software Development Kit で定義され、各プロバイダは、サポートする特定のキーワードと値の組み合わせをドキュメントに記述します。接続文字列の詳細については、「OPENDATASOURCE (Transact-SQL)」を参照してください。

詳細については、「アドホック名を使用したデータ ソースの識別」を参照してください。

リンク サーバーのアクセス

sp_addlinkedserver を使用してリンク サーバーを作成後、次の方法を使用してサーバーにアクセスできます。

  • リンク サーバーに基づく名前を使用した SELECT、INSERT、UPDATE、および DELETE の各ステートメントにより、リンク サーバーのテーブルにアクセスする分散クエリ。

  • 4 つの部分で構成される名前を使用してリンク サーバーに対して実行されるリモート ストアド プロシージャ。

  • AT linked_server_name 拡張機能を使用して、パラメータ化された任意のパススルー コマンドを受け取る EXECUTE ステートメント。このコマンドには、DDL (データ定義言語) ステートメントと DML (データ操作言語) ステートメント、または複数の結果を返すコマンドが含まれます。詳細については、「パススルー クエリのテーブルとしての使用」を参照してください。

sp_addserver は既存のアプリケーション用の互換機能として保持されていますが、今後のリリースではこのストアド プロシージャはサポートされなくなる予定です。アプリケーションを SQL Server 2008 に移植するときは、移植するアプリケーションではしばらくの間、リンク サーバーの定義に対して分散クエリを使用する新しいコードと、リモート サーバー定義を使用する既存のコードを併用して実行する必要が生じる場合があります。リンク サーバーとリモート サーバーはどちらも同じ名前空間を使用します。したがって、リンク サーバーまたはリモート サーバーの定義では、リモートにアクセスされるサーバーのネットワーク名とは異なる名前を使用する必要があります。エントリのうち 1 つに異なるサーバー名を定義し、sp_setnetname を使用してリモート サーバーのネットワーク名と関連付けます。