OPENDATASOURCE (Transact-SQL)
適用対象:SQL Server (サポートされているすべてのバージョン)
Azure SQL Managed Instance
リンク サーバー名を使用せずに、4 つの要素で構成されるオブジェクト名の一部としてアドホック接続情報を提供します。
構文
OPENDATASOURCE ( 'provider_name', 'init_string' )
Note
SQL Server 2014 以前の Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。
引数
'provider_name'
データ ソースにアクセスするときに使用される、OLE DB プロバイダーの PROGID として登録されている名前を指定します。 provider_name のデータ型は char であり、既定値はありません。
重要
以前の Microsoft OLE DB Provider for SQL Server (SQLOLEDB) と SQL Server Native Client OLE DB プロバイダー (SQLNCLI) は非推奨のままであり、新しい開発作業にはどちらの使用もお勧めできません。 代わりに、新しい Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL) を使用します。これは、最新のサーバー機能で更新されます。
'init_string'
接続先のプロバイダーの IDataInitialize インターフェイスに渡される接続文字列を指定します。 プロバイダー文字列の構文は、'keyword1value;keyword2value' のように、セミコロンで区切ったキーワードと値のペアに基づいています。
プロバイダーでサポートされている特定のキーワードと値のペアについては、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を使用して、リモート サーバー の AdventureWorks2012 データベース内のテーブルにアクセスします。
SELECT
ステートメントは、返す行セットの定義に使用します。 プロバイダーの文字列には、Server
と Trusted_Connection
キーワードが含まれます。 これらのキーワードは、SQL Server OLE DB Driver によって認識されます。
SELECT GroupName, Name, DepartmentID
FROM OPENDATASOURCE('MSOLEDBSQL', 'Server=Seattle1;Database=AdventureWorks2016;TrustServerCertificate=Yes;Trusted_Connection=Yes;').HumanResources.Department
ORDER BY GroupName, Name;
B. OPENDATASOURCE を SELECT および SQL Server OLE DB プロバイダーと共に使用する
次の例では、 のインスタンスへのアドホック接続をPayroll
London
作成し、SQL Serverに対してクエリを実行AdventureWorks2012.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')
.AdventureWorks2012.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$] ;