OPENDATASOURCE (Transact-SQL)

適用対象:SQL ServerAzure SQL Managed Instance

リンク サーバー名を使用せずに、4 つの要素で構成されるオブジェクト名の一部としてアドホック接続情報を提供します。

Transact-SQL 構文表記規則

構文

OPENDATASOURCE ( 'provider_name', 'init_string' )  

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

'provider_name'

データ ソースにアクセスするときに使用される、OLE DB プロバイダーの PROGID として登録されている名前を指定します。 provider_name のデータ型は char であり、既定値はありません。

重要

SQL Server Native Client (SNAC と略されることがよくあります) は、SQL Server 2022 (16.x) と SQL Server Management Studio 19 (SSMS) から削除されました。 SQL Server Native Client OLE DB プロバイダー (SQLNCLI または SQLNCLI11) とレガシ Microsoft OLE DB Provider for SQL Server (SQLOLEDB) はどちらも、新しい開発には推奨されません。 今後は、新しい Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server に切り替えてください。

'init_string'

接続先のプロバイダーの IDataInitialize インターフェイスに渡される接続文字列を指定します。 プロバイダー文字列の構文は、'keyword1=value;keyword2=value' のように、セミコロンで区切ったキーワードと値のペアに基づいています。

プロバイダーでサポートされる、特定のキーワードと値の組み合わせについては、Microsoft Data Access SDK を参照してください。 このドキュメントには、基本構文が定義されています。 次の表は、init_string 引数で最もよく使われるキーワードの一覧です。

Keyword OLE DB プロパティ 有効な値と説明
Data Source DBPROP_INIT_DATASOURCE 接続先のデータ ソースの名前。 この値の解釈は、プロバイダーによって異なります。 SQL Server Native Client OLE DB プロバイダーの場合、この値はサーバーの名前を表します。 Jet OLE DB プロバイダーの場合、この値は .mdb ファイルまたは .xls ファイルのフル パスを表します。
場所 DBPROP_INIT_LOCATION 接続先のデータベースの位置。
Extended Properties DBPROP_INIT_PROVIDERSTRING プロバイダー固有の接続文字列。
Connect timeout DBPROP_INIT_TIMEOUT 接続試行が失敗する基準となるタイムアウト値。
User ID DBPROP_AUTH_USERID 接続に使用されるユーザー ID。
Password DBPROP_AUTH_PASSWORD 接続に使用されるパスワード。
Catalog DBPROP_INIT_CATALOG データ ソースに接続するときの初期カタログまたは既定のカタログの名前。
Integrated Security DBPROP_AUTH_INTEGRATED Windows 認証を指定する SSPI

注釈

OPENROWSET では、列の照合順序セットに関係なく、常にインスタンスの照合順序が継承されます。

OPENDATASOURCE は、OLE DB データ ソースからリモート データにアクセスするときに使用できます。ただし、この場合は、指定したプロバイダーに対して DisallowAdhocAccess レジストリ オプションが明示的に 0 に設定されており、Ad Hoc Distributed Queries 詳細構成オプションが有効になっている必要があります。 これらのオプションが設定されていない場合は、既定でアドホック アクセスは許可されません。

OPENDATASOURCE 関数は、Transact-SQL 構文内のリンク サーバー名と同じ位置で使用できます。 つまり、OPENDATASOURCE は、4 つの要素で構成される名前の先頭で、SELECT、INSERT、UPDATE、および DELETE ステートメント内のテーブル名やビュー名、または EXECUTE ステートメント内のリモート ストアド プロシージャを参照する要素として使用できます。 リモート ストアド プロシージャを実行する場合、OPENDATASOURCE では別の SQL Server インスタンスを参照する必要があります。 OPENDATASOURCE の引数に変数は指定できません。

OPENROWSET 関数と同様に、OPENDATASOURCE では、あまり頻繁にアクセスされない OLE DB データ ソースだけを参照してください。 頻繁にアクセスされるデータ ソースに対してはリンク サーバーを定義します。 OPENDATASOURCE でも OPENROWSET でも、リンク サーバー定義のすべての機能は提供されず、たとえばセキュリティを管理したりカタログ情報に対してクエリを実行したりすることはできません。 すべての接続情報は、パスワードを含め、OPENDATASOURCE を呼び出すたびに指定する必要があります。

重要

Windows 認証は、SQL Server 認証よりもはるかに安全性に優れています。 できるだけ Windows 認証を使用してください。 接続文字列では、OPENDATASOURCE と共に明示的なパスワードを指定しないでください。

各プロバイダーの接続要件は、リンク サーバー作成時におけるこれらのパラメーターの要件に似ています。 多くの一般的なプロバイダーについて詳しくは、「sp_addlinkedserver (Transact-SQL)」の一覧をご覧ください。

FROM 句での OPENDATASOURCEOPENQUERY、または OPENROWSET の呼び出しは、更新のターゲットとして使用されるこれらの関数の呼び出しとは別に評価されます。これは、両方の呼び出しに同じ引数が指定されている場合にも当てはまります。 特に、いずれか一方の呼び出しの結果に適用されるフィルター条件または結合条件は、もう一方の結果に影響しません。

アクセス許可

すべてのユーザーが OPENDATASOURCE を実行できます。 リモート サーバーへの接続に使用される権限は、接続文字列によって決まります。

A. OPENDATASOURCE を SELECT および SQL Server OLE DB Driver と共に使用する

次の例では、Microsoft OLE DB Driver for SQL Server を使用して、リモート サーバー Seattle1AdventureWorks2022 データベースの HumanResources.Department テーブルにアクセスします。 SELECT ステートメントは、返す行セットの定義に使用します。 プロバイダーの文字列には、ServerTrusted_Connection キーワードが含まれます。 これらのキーワードは、SQL Server OLE DB Driver によって認識されます。

SELECT GroupName, Name, DepartmentID  
FROM OPENDATASOURCE('MSOLEDBSQL', 'Server=Seattle1;Database=AdventureWorks2022;TrustServerCertificate=Yes;Trusted_Connection=Yes;').HumanResources.Department  
ORDER BY GroupName, Name;  

B. OPENDATASOURCE を SELECT および SQL Server OLE DB プロバイダーと共に使用する

次の例では、サーバー London 上の SQL Server の Payroll インスタンスにアドホック接続を作成し、AdventureWorks2022.HumanResources.Employee テーブルをクエリします。

Note

SQLNCLI を使用すると、SQL Server が最新バージョンの SQL Server Native Client OLE DB プロバイダーにリダイレクトされます。 OLE DB プロバイダーは、指定の PROGID を使用してレジストリに登録されることが想定されています。

重要

SQL Server Native Client OLE DB プロバイダー (SQLNCLI) は非推奨のままであり、新しい開発作業での使用はお勧めできません。 代わりに、新しい Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL) を使用します。これは、最新のサーバー機能で更新されます。

SELECT *  
FROM OPENDATASOURCE('SQLNCLI',  
    'Data Source=London\Payroll;Integrated Security=SSPI')  
    .AdventureWorks2022.HumanResources.Employee;  

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

次の例では、1997 - 2003 形式の Excel スプレッドシートへのアドホック接続を作成します。

SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',  
    'Data Source=C:\DataFolder\Documents\TestExcel.xls;Extended Properties=EXCEL 5.0')...[Sheet1$] ;  

次のステップ