OPENDATASOURCE (Transact-SQL)
適用対象: SQL Server
Azure SQL Managed Instance
リンク サーバー名を使用せずに、4 つの要素で構成されるオブジェクト名の一部としてアドホック接続情報を提供します。
構文
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
句での OPENDATASOURCE
、OPENQUERY
、または OPENROWSET
の呼び出しは、更新のターゲットとして使用されるこれらの関数の呼び出しとは別に評価されます。これは、両方の呼び出しに同じ引数が指定されている場合にも当てはまります。 特に、いずれか一方の呼び出しの結果に適用されるフィルター条件または結合条件は、もう一方の結果に影響しません。
アクセス許可
すべてのユーザーが OPENDATASOURCE を実行できます。 リモート サーバーへの接続に使用される権限は、接続文字列によって決まります。
例
A. OPENDATASOURCE を SELECT および SQL Server OLE DB Driver と共に使用する
次の例では、Microsoft OLE DB Driver for SQL Server を使用して、リモート サーバー Seattle1
の AdventureWorks2022
データベースの HumanResources.Department
テーブルにアクセスします。
SELECT
ステートメントは、返す行セットの定義に使用します。 プロバイダーの文字列には、Server
と Trusted_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$] ;