OPENROWSET (Transact-SQL)OPENROWSET (Transact-SQL)

適用対象:○SQL Server (2008 以降) ○Azure SQL Database (Managed Instance のみ) ×Azure SQL Data Warehouse ×Parallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database (Managed Instance only) noAzure SQL Data Warehouse noParallel Data Warehouse

OLE DB データ ソースからリモート データへのアクセスに必要な、すべての接続情報をインクルードします。Includes all connection information that is required to access remote data from an OLE DB data source. これは、リンク サーバー内のテーブルにアクセスする代わりに、OLE DB を使用してリモート データに接続しアクセスする特別な方法です。This method is an alternative to accessing tables in a linked server and is a one-time, ad hoc method of connecting and accessing remote data by using OLE DB. OLE DB データ ソースをより頻繁に参照する場合は、代わりにリンク サーバーを使用してください。For more frequent references to OLE DB data sources, use linked servers instead. 詳しくは、「 リンク サーバー (データベース エンジン)」を参照してください。For more information, see Linked Servers (Database Engine). OPENROWSET 関数は、テーブル名と同じように、クエリの FROM 句で参照できます。The OPENROWSET function can be referenced in the FROM clause of a query as if it were a table name. OPENROWSET 関数は、INSERTUPDATE、または DELETE ステートメントのターゲット テーブルとしても参照できます。ただしこれは OLE DB プロバイダーの機能により制限されます。The OPENROWSET function can also be referenced as the target table of an INSERT, UPDATE, or DELETE statement, subject to the capabilities of the OLE DB provider. クエリでは複数の結果セットが返される場合がありますが、OPENROWSET では最初の 1 つだけが返されます。Although the query might return multiple result sets, OPENROWSET returns only the first one.

OPENROWSET では、組み込みの BULK プロバイダーによる一括操作もサポートされ、ファイルのデータを行セットとして読み取り、返すことができます。OPENROWSET also supports bulk operations through a built-in BULK provider that enables data from a file to be read and returned as a rowset.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

  
OPENROWSET   
( { 'provider_name' , { 'datasource' ; 'user_id' ; 'password'   
   | 'provider_string' }   
   , {   [ catalog. ] [ schema. ] object   
       | 'query'   
     }   
   | BULK 'data_file' ,   
       { FORMATFILE = 'format_file_path' [ <bulk_options> ]  
       | SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB }  
} )   
  
<bulk_options> ::=  
   [ , CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]   
   [ , DATASOURCE = 'data_source_name' ]
   [ , ERRORFILE = 'file_name' ]  
   [ , ERRORFILE_DATASOURCE = 'data_source_name' ]   
   [ , FIRSTROW = first_row ]   
   [ , LASTROW = last_row ]   
   [ , MAXERRORS = maximum_errors ]   
   [ , ROWS_PER_BATCH = rows_per_batch ]  
   [ , ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) [ UNIQUE ] ]
  
   -- bulk_options related to input file format
   [ , FORMAT = 'CSV' ]
   [ , FIELDQUOTE = 'quote_characters']
   [ , FORMATFILE = 'format_file_path' ]   

引数Arguments

'provider_name''provider_name'
レジストリの OLE DB プロバイダーの表示名 (または PROGID) を表す文字列を指定します。Is a character string that represents the friendly name (or PROGID) of the OLE DB provider as specified in the registry. provider_name 既定値はありません。provider_name has no default value.

'datasource''datasource'
特定の OLE DB データ ソースに対応する文字列定数を指定します。Is a string constant that corresponds to a particular OLE DB data source. datasource は DBPROP_INIT_DATASOURCE のプロパティで、プロバイダーの IDBProperties インターフェイスに渡され、プロバイダーの初期化に使用されます。datasource is the DBPROP_INIT_DATASOURCE property to be passed to the IDBProperties interface of the provider to initialize the provider. 一般的に、この文字列にはデータベース ファイルの名前、データベース サーバーの名前、プロバイダーがデータベースを検索する際に認識する名前のいずれかを指定します。Typically, this string includes the name of the database file, the name of a database server, or a name that the provider understands to locate the database or databases.

'user_id''user_id'
指定した OLE DB プロバイダーに渡されるユーザー名を表す文字列定数を指定します。Is a string constant that is the user name passed to the specified OLE DB provider. user_id は接続のセキュリティ コンテキストを示し、DBPROP_AUTH_USERID プロパティとして渡され、プロバイダーの初期化に使用されます。user_id specifies the security context for the connection and is passed in as the DBPROP_AUTH_USERID property to initialize the provider. user_id Microsoft Windows のログイン名にすることはできません。user_id cannot be a Microsoft Windows login name.

'password''password'
OLE DB プロバイダーに渡されるユーザー パスワードを表す文字列定数を指定します。Is a string constant that is the user password to be passed to the OLE DB provider. password は DBPROP_AUTH_PASSWORD プロパティとして引き渡され、プロバイダーの初期化に使用されます。password is passed in as the DBPROP_AUTH_PASSWORD property when initializing the provider. パスワード Microsoft Windows のパスワードをすることはできません。password cannot be a Microsoft Windows password.

'provider_string''provider_string'
プロバイダー固有の接続文字列を指定します。DBPROP_INIT_PROVIDERSTRING プロパティとして渡され、プロバイダーの初期化に使用されます。Is a provider-specific connection string that is passed in as the DBPROP_INIT_PROVIDERSTRING property to initialize the OLE DB provider. provider_string 通常、プロバイダーの初期化に必要なすべての接続情報をカプセル化します。provider_string typically encapsulates all the connection information required to initialize the provider. SQL ServerSQL Server Native Client OLE DB プロバイダーで認識されるキーワードの一覧については、「初期化プロパティと承認プロパティ」を参照してください。For a list of keywords that are recognized by the SQL ServerSQL Server Native Client OLE DB provider, see Initialization and Authorization Properties.

catalogcatalog
指定したオブジェクトが存在するカタログまたはデータベースの名前を指定します。Is the name of the catalog or database in which the specified object resides.

schemaschema
指定したオブジェクトのスキーマまたはオブジェクト所有者の名前を指定します。Is the name of the schema or object owner for the specified object.

objectobject
操作するオブジェクトを一意に識別するオブジェクト名を指定します。Is the object name that uniquely identifies the object to work with.

'query''query'
プロバイダーに送られ、プロバイダーによって実行される文字列定数を指定します。Is a string constant sent to and executed by the provider. SQL ServerSQL Server のローカル インスタンスでは、このクエリは処理されず、プロバイダーから返されたクエリ結果が処理されます (パススルー クエリ)。The local instance of SQL ServerSQL Server does not process this query, but processes query results returned by the provider, a pass-through query. パススルー クエリは、表形式のデータをテーブル名ではなくコマンド言語のみで公開するプロバイダーで使用すると便利です。Pass-through queries are useful when used on providers that do not make available their tabular data through table names, but only through a command language. パススルー クエリは、クエリ プロバイダーが OLE DB をサポートしていれば、リモート サーバーでサポートされてコマンド オブジェクトとその必須インターフェイス。Pass-through queries are supported on the remote server, as long as the query provider supports the OLE DB Command object and its mandatory interfaces. 詳細については、SQL Server Native Client (OLE DB) のリファレンスをご覧ください。For more information, see SQL Server Native Client (OLE DB) Reference.

BULKBULK
ファイルからのデータ読み取りに OPENROWSET の BULK 行セット プロバイダーを使用します。Uses the BULK rowset provider for OPENROWSET to read data from a file. SQL ServerSQL Server では、OPENROWSET を使用すると、データを対象テーブルに読み込むことなくデータ ファイルからの読み取りができます。In SQL ServerSQL Server, OPENROWSET can read from a data file without loading the data into a target table. このため、OPENROWSET は簡単な SELECT ステートメントで使用できます。This lets you use OPENROWSET with a simple SELECT statement.

重要

Azure SQL Database では、Windows ファイルからの読み取りはサポートされません。Azure SQL Database does not support reading from Windows files.

BULK オプションの引数を使用すると、データの読み取りを開始および終了する場所や、エラーの取り扱い、データの解釈方法について、細かく制御することができます。The arguments of the BULK option allow for significant control over where to start and end reading data, how to deal with errors, and how data is interpreted. たとえば、データ ファイルを varbinaryvarcharnvarchar 型の単一行、単一列の行セットとして読み取るように指定できます。For example, you can specify that the data file be read as a single-row, single-column rowset of type varbinary, varchar, or nvarchar. 既定の動作については、後の引数の説明を参照してください。The default behavior is described in the argument descriptions that follow.

BULK オプションの使用方法の詳細については、後の「解説」を参照してください。For information about how to use the BULK option, see "Remarks," later in this topic. BULK オプションに必要な権限については、後の「権限」を参照してください。For information about the permissions that are required by the BULK option, see "Permissions," later in this topic.

注意

OPENROWSET (BULK ...) を完全復旧モデルでデータのインポートに使用する場合、ログ記録は最適化されません。When used to import data with the full recovery model, OPENROWSET (BULK ...) does not optimize logging.

データを一括インポート用に準備する方法については、「一括エクスポートまたは一括インポートのデータの準備 (SQL Server)」をご覧ください。For information on preparing data for bulk import, see Prepare Data for Bulk Export or Import (SQL Server).

'data_file''data_file'
データを対象テーブルにコピーするデータ ファイルの完全なパスを指定します。Is the full path of the data file whose data is to be copied into the target table.
適用対象:SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1。Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 以降では、data_file は Azure Blob Storage に格納することができます。Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, the data_file can be in Azure blob storage. 例については、「Azure BLOB ストレージのデータに一括アクセスする例」をご覧ください。For examples, see Examples of Bulk Access to Data in Azure Blob Storage.

重要

Azure SQL Database では、Windows ファイルからの読み取りはサポートされません。Azure SQL Database does not support reading from Windows files.

<bulk_options><bulk_options>
BULK オプションの引数を 1 つ以上指定します。Specifies one or more arguments for the BULK option.

CODEPAGE = { 'ACP'| 'OEM'| 'RAW'| 'code_page' }CODEPAGE = { 'ACP'| 'OEM'| 'RAW'| 'code_page' }
データ ファイル内のデータのコード ページを指定します。Specifies the code page of the data in the data file. CODEPAGE は、データに charvarchartext 列 (文字値が 127 より大きいか、32 未満) が含まれている場合にのみ当てはまります。CODEPAGE is relevant only if the data contains char, varchar, or text columns with character values more than 127 or less than 32.

重要

CODEPAGE は、Linux ではサポートされていないオプションです。CODEPAGE is not a supported option on Linux.

注意

フォーマット ファイルの各列に対して照合順序名を指定することをお勧めします (65001 オプションを照合順序/コード ページ仕様よりも優先する場合を除く)。We recommend that you specify a collation name for each column in a format file, except when you want the 65001 option to have priority over the collation/code page specification.

CODEPAGE の値CODEPAGE value [説明]Description
ACPACP charvarchar、または text データ型の列を、ANSI/MicrosoftMicrosoft Windows コード ページ (ISO 1252) から SQL ServerSQL Server コード ページに変換します。Converts columns of char, varchar, or text data type from the ANSI/MicrosoftMicrosoft Windows code page (ISO 1252) to the SQL ServerSQL Server code page.
OEM (既定値)OEM (default) charvarchar、または text データ型の列を、システムの OEM コード ページから SQL ServerSQL Server コード ページに変換します。Converts columns of char, varchar, or text data type from the system OEM code page to the SQL ServerSQL Server code page.
RAWRAW コード ページの変換は行われません。No conversion occurs from one code page to another. これは最も高速なオプションです。This is the fastest option.
code_pagecode_page データ ファイルの文字データのエンコードに使用されているソースのコード ページを示します (例 : 850)。Indicates the source code page on which the character data in the data file is encoded; for example, 850.

** 重要 ** SQL Server 2016 (13.x)SQL Server 2016 (13.x) より前のバージョンはコード ページ 65001 (UTF-8 エンコード) をサポートしません。** Important ** Versions prior to SQL Server 2016 (13.x)SQL Server 2016 (13.x) do not support code page 65001 (UTF-8 encoding).

ERRORFILE ='file_name'ERRORFILE ='file_name'
形式エラーがあり、OLE DB 行セットに変換できない行を収集するときに使用するファイルを指定します。Specifies the file used to collect rows that have formatting errors and cannot be converted to an OLE DB rowset. 該当する行は、データ ファイルからこのエラー ファイルに "そのまま" コピーされます。These rows are copied into this error file from the data file "as is."

エラー ファイルはコマンドの実行開始時に作成されます。The error file is created at the start of the command execution. 存在するファイルの場合にはエラーが発生し、An error will be raised if the file already exists. 拡張子 .ERROR.txt の制御ファイルが作成されます。Additionally, a control file that has the extension .ERROR.txt is created. このファイルにはエラー ファイルの各行と、エラーの診断が含まれています。This file references each row in the error file and provides error diagnostics. エラーが修正されると、データは読み込み可能になります。After the errors have been corrected, the data can be loaded.
適用対象:SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1。Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. SQL Server 2017 (14.x)SQL Server 2017 (14.x) 以降では、error_file_path は Azure Blob Storage に格納することができます。Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x), the error_file_path can be in Azure blob storage.

'errorfile_data_source_name''errorfile_data_source_name'
適用対象:SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1。Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. 名前付きの外部データ ソースで、インポート中に見つかったエラーを格納するエラー ファイルの Azure Blob Storage の場所を指しています。Is a named external data source pointing to the Azure Blob storage location of the error file that will contain errors found during the import. 外部データ ソースは、SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 で追加された TYPE = BLOB_STORAGE オプションを使用して作成する必要があります。The external data source must be created using the TYPE = BLOB_STORAGE option added in SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. 詳しくは、「CREATE EXTERNAL DATA SOURCE」をご覧ください。For more information, see CREATE EXTERNAL DATA SOURCE.

FIRSTROW =first_rowFIRSTROW =first_row
読み込み開始行の行番号を指定します。Specifies the number of the first row to load. 既定値は 1 です。The default is 1. 指定したデータ ファイルの最初の行を示します。This indicates the first row in the specified data file. 行番号は行ターミネータの数をカウントして決定されます。The row numbers are determined by counting the row terminators. FIRSTROW は 1 から始まります。FIRSTROW is 1-based.

LASTROW =last_rowLASTROW =last_row
読み込み終了行の行番号を指定します。Specifies the number of the last row to load. 既定値は 0 です。The default is 0. 指定したデータ ファイルの最後の行を示します。This indicates the last row in the specified data file.

MAXERRORS =maximum_errorsMAXERRORS =maximum_errors
フォーマット ファイルで定義されている、構文エラーまたは違反行の許容最大数を指定します。この数を超えると、OPENROWSET で例外が発生します。Specifies the maximum number of syntax errors or nonconforming rows, as defined in the format file, that can occur before OPENROWSET throws an exception. OPENROWSET は、違反行を読み込まずに無視し、MAXERRORS に達するまで、違反行はエラーとしてカウントされます。Until MAXERRORS is reached, OPENROWSET ignores each bad row, not loading it, and counts the bad row as one error.

既定の maximum_errors は 10 です。The default for maximum_errors is 10.

注意

MAX_ERRORS は CHECK 制約、または変換には適用されません moneybigint データ型。MAX_ERRORS does not apply to CHECK constraints, or to converting money and bigint data types.

ROWS_PER_BATCH =rows_per_batchROWS_PER_BATCH =rows_per_batch
データ ファイル内にあるデータ行の概算数を指定します。Specifies the approximate number of rows of data in the data file. この値は実際の行数と同じ次数にする必要があります。This value should be of the same order as the actual number of rows.

OPENROWSET では、常にデータ ファイルが単一のバッチとしてインポートされますが、OPENROWSET always imports a data file as a single batch. rows_per_batch に 0 より大きい値 (> 0) を指定した場合、クエリ プロセッサでは、クエリ プランのリソース割り当てのヒントとして rows_per_batch の値が使用されます。However, if you specify rows_per_batch with a value > 0, the query processor uses the value of rows_per_batch as a hint for allocating resources in the query plan.

ROWS_PER_BATCH の既定値はありません。By default, ROWS_PER_BATCH is unknown. ROWS_PER_BATCH = 0 は、ROWS_PER_BATCH を省略した場合と同じになります。Specifying ROWS_PER_BATCH = 0 is the same as omitting ROWS_PER_BATCH.

ORDER ( { column [ ASC | DESC ] } [ ,... n ] [ UNIQUE ] )ORDER ( { column [ ASC | DESC ] } [ ,... n ] [ UNIQUE ] )
データ ファイル内のデータの並べ替え方法を指定するオプションのヒント。An optional hint that specifies how the data in the data file is sorted. 既定では、一括操作はデータ ファイルが並べ替えられていないことを前提に実行されます。By default, the bulk operation assumes the data file is unordered. 指定された順序を利用してクエリ オプティマイザーでより効率的なクエリ プランを生成することができる場合、パフォーマンスが向上する可能性があります。Performance might improve if the order specified can be exploited by the query optimizer to generate a more efficient query plan. 並べ替えの指定は、次の場合に役立ちます。Examples for when specifying a sort can be beneficial include the following:

  • クラスター化インデックスを持ち、クラスター化インデックス キーで行セット データが並べ替えられているテーブルに行を挿入する場合。Inserting rows into a table that has a clustered index, where the rowset data is sorted on the clustered index key.

  • 行セットを別のテーブルに結合するとき、並べ替え列と結合列が一致する場合。Joining the rowset with another table, where the sort and join columns match.

  • 並べ替え列で行セット データを集約する場合。Aggregating the rowset data by the sort columns.

  • クエリの FROM 句で行セットをソース テーブルとして使用するとき、並べ替え列と結合列が一致する場合。Using the rowset as a source table in the FROM clause of a query, where the sort and join columns match.

UNIQUE は、データ ファイルに重複したエントリがないことを指定します。UNIQUE specifies that the data file does not have duplicate entries.

データ ファイル内の実際の行が指定の順序で並べ替えられていない場合、または UNIQUE ヒントが指定された一方で重複したキーが存在する場合は、エラーが返されます。If the actual rows in the data file are not sorted according to the order that is specified, or if the UNIQUE hint is specified and duplicates keys are present, an error is returned.

ORDER を使用する場合は列の別名が必要です。Column aliases are required when ORDER is used. 列の別名リストは、BULK 句によってアクセスされる派生テーブルを参照する必要があります。The column alias list must reference the derived table that is being accessed by the BULK clause. ORDER 句に指定された列名は、この列の別名リストを参照します。The column names that are specified in the ORDER clause refer to this column alias list. 大きな値の型 (varchar (max), 、nvarchar (max), 、varbinary (max), 、および xml) およびラージ オブジェクト (LOB) 型 (テキスト, 、ntext, 、および イメージ) 列を指定することはできません。Large value types (varchar(max), nvarchar(max), varbinary(max), and xml) and large object (LOB) types (text, ntext, and image) columns cannot be specified.

SINGLE_BLOBSINGLE_BLOB
data_file の内容を、varbinary(max) 型の単一行、単一列の行セットとして返します。Returns the contents of data_file as a single-row, single-column rowset of type varbinary(max).

重要

すべての Windows エンコード変換がサポートされるのは SINGLE_BLOB オプションだけなので、SINGLE_CLOB オプションや SINGLE_NCLOB オプションではなく、SINGLE_BLOB オプションだけを使用して XML データをインポートすることをお勧めします。We recommend that you import XML data only using the SINGLE_BLOB option, rather than SINGLE_CLOB and SINGLE_NCLOB, because only SINGLE_BLOB supports all Windows encoding conversions.

SINGLE_CLOBSINGLE_CLOB
data_file を ASCII として読み取り、現在のデータベースの照合順序に従い、内容を varchar(max) 型の単一行、単一列の行セットとして返します。By reading data_file as ASCII, returns the contents as a single-row, single-column rowset of type varchar(max), using the collation of the current database.

SINGLE_NCLOBSINGLE_NCLOB
data_file を UNICODE として読み取り、現在のデータベースの照合順序に従い、内容を nvarchar(max) 型の単一行、単一列の行セットとして返します。By reading data_file as UNICODE, returns the contents as a single-row, single-column rowset of type nvarchar(max), using the collation of the current database.

入力ファイル フォーマットのオプションInput file format options

FORMAT = 'CSV'FORMAT = 'CSV'
適用対象:SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1。Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
RFC 4180 標準に準拠しているコンマ区切り値ファイルを指定します。Specifies a comma separated values file compliant to the RFC 4180 standard.

FORMATFILE ='format_file_path'FORMATFILE ='format_file_path'
フォーマット ファイルの完全パスを指定します。Specifies the full path of a format file. SQL ServerSQL Server では、次の 2 種類のフォーマット ファイルがサポートされます:XML と非 XML。supports two types of format files: XML and non-XML.

フォーマット ファイルは、結果セットの列の型を定義する場合に必要となります。A format file is required to define column types in the result set. ただし SINGLE_CLOB、SINGLE_BLOB、または SINGLE_NCLOB を指定した場合は例外で、この場合はフォーマット ファイルは必要ありません。The only exception is when SINGLE_CLOB, SINGLE_BLOB, or SINGLE_NCLOB is specified; in which case, the format file is not required.

フォーマット ファイルについては、「データの一括インポートでのフォーマット ファイルの使用 (SQL Server)」をご覧ください。For information about format files, see Use a Format File to Bulk Import Data (SQL Server).

適用対象:SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1。Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 以降では、format_file_path は Azure Blob Storage に格納することができます。Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, the format_file_path can be in Azure blob storage. 例については、「Azure BLOB ストレージのデータに一括アクセスする例」をご覧ください。For examples, see Examples of Bulk Access to Data in Azure Blob Storage.

FIELDQUOTE = 'field_quote'FIELDQUOTE = 'field_quote'
適用対象:SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1。Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
CSV ファイルで引用符文字として使用される文字を指定します。Specifies a character that will be used as the quote character in the CSV file. 指定されていない場合は、RFC 4180 標準の定義に従って引用符文字 (") が引用符文字として使用されます。If not specified, the quote character (") will be used as the quote character as defined in the RFC 4180 standard.

RemarksRemarks

OPENROWSET は、OLE DB データ ソースからリモート データにアクセスするときに使用できます。ただしこの場合、指定したプロバイダーに対して DisallowAdhocAccess レジストリ オプションが明示的に 0 に設定されており、Ad Hoc Distributed Queries 詳細構成オプションが有効になっている必要があります。OPENROWSET can be used to access remote data from OLE DB data sources only when the DisallowAdhocAccess registry option is explicitly set to 0 for the specified provider, and the Ad Hoc Distributed Queries advanced configuration option is enabled. これらのオプションが設定されていない場合は、既定でアドホック接続は許可されません。When these options are not set, the default behavior does not allow for ad hoc access.

リモートの OLE DB データ ソースにアクセスするとき、信頼関係接続のログイン ID は、クライアントの接続先サーバーからクエリの対象サーバーに自動的に委任されるわけではありません。When accessing remote OLE DB data sources, the login identity of trusted connections is not automatically delegated from the server on which the client is connected to the server that is being queried. したがって、認証の委任を構成する必要があります。Authentication delegation must be configured.

指定したデータ ソースにおいて、OLE DB プロバイダーが複数のカタログとスキーマをサポートする場合は、カタログ名とスキーマ名を指定する必要があります。Catalog and schema names are required if the OLE DB provider supports multiple catalogs and schemas in the specified data source. _カタログ_と_スキーマ_の値は、OLE DB プロバイダーではサポートしていない場合は省略できます。Values for catalog and )schema can be omitted when the OLE DB provider does not support them. プロバイダーがスキーマ名しかサポートしていない場合は、スキーマ.オブジェクト という形式の 2 部構成の名前を指定する必要があります。If the provider supports only schema names, a two-part name of the form schema.object must be specified. プロバイダーがカタログ名しかサポートしていない場合は、カタログ.スキーマ.オブジェクト という形式の 3 部構成の名前を指定する必要があります。If the provider supports only catalog names, a three-part name of the form catalog.schema.object must be specified. SQL ServerSQL Server Native Client OLE DB プロバイダーを使用するパススルー クエリには、3 つの部分で構成される名前を指定する必要があります。Three-part names must be specified for pass-through queries that use the SQL ServerSQL Server Native Client OLE DB provider. 詳しくは、「Transact-SQL 構文表記規則 (Transact-SQL)」をご覧ください。For more information, see Transact-SQL Syntax Conventions (Transact-SQL).

OPENROWSET の引数に変数は指定できません。OPENROWSET does not accept variables for its arguments.

FROM 句での OPENDATASOURCEOPENQUERY、または OPENROWSET の呼び出しは、更新のターゲットとして使用されるこれらの関数の呼び出しとは別に評価されます。これは、両方の呼び出しに同じ引数が指定されている場合にも当てはまります。Any call to OPENDATASOURCE, OPENQUERY, or OPENROWSET in the FROM clause is evaluated separately and independently from any call to these functions used as the target of the update, even if identical arguments are supplied to the two calls. 特に、いずれか一方の呼び出しの結果に適用されるフィルター条件または結合条件は、もう一方の結果に影響しません。In particular, filter or join conditions applied on the result of one of those calls have no effect on the results of the other.

OPENROWSET を BULK オプションと共に使用するUsing OPENROWSET with the BULK Option

次に示す Transact-SQLTransact-SQL の機能拡張では、OPENROWSET(BULK...) 関数がサポートされます。The following Transact-SQLTransact-SQL enhancements support the OPENROWSET(BULK...) function:

  • SELECT と共に使用される FROM 句では、テーブル名の代わりに OPENROWSET(BULK...) を呼び出すことができます。このとき SELECT の機能に制限はありません。A FROM clause that is used with SELECT can call OPENROWSET(BULK...) instead of a table name, with full SELECT functionality.

    OPENROWSETBULK オプションを使用するには、FROM 句に相関名を指定する必要があります。これは範囲変数または別名とも呼ばれます。OPENROWSET with the BULK option requires a correlation name, also known as a range variable or alias, in the FROM clause. 列には別名を指定できます。Column aliases can be specified. 列の別名のリストを指定しない場合は、フォーマット ファイルに列名が必要です。If a column alias list is not specified, the format file must have column names. 次のように、列の別名を指定した場合は、フォーマット ファイルの列名よりもオーバーライドして使用されます。Specifying column aliases overrides the column names in the format file, such as:

    FROM OPENROWSET(BULK...) AS table_alias

    FROM OPENROWSET(BULK...) AS table_alias(column_alias,...n)

重要

AS <table_alias> への追加に失敗すると次のエラーが発生します:Failure to add the AS <table_alias> will result in the error:
メッセージ 491、レベル 16、状態 1、行 20Msg 491, Level 16, State 1, Line 20
FROM 句の一括行セットには相関名を指定してください。A correlation name must be specified for the bulk rowset in the from clause.

  • SELECT...FROM OPENROWSET(BULK...) ステートメントは、データをテーブルにインポートせずに、ファイル内のデータに対してクエリを直接実行します。A SELECT...FROM OPENROWSET(BULK...) statement queries the data in a file directly, without importing the data into a table. また、SELECT...FROM OPENROWSET(BULK...) ステートメントでフォーマット ファイルを使用して列名やデータ型を指定すると、一括列の別名を列挙することもできます。SELECT...FROM OPENROWSET(BULK...) statements can also list bulk-column aliases by using a format file to specify column names, and also data types.

  • INSERT ステートメントまたは MERGE ステートメント内でソース テーブルとして OPENROWSET(BULK...) を使用すると、データ ファイルから SQL ServerSQL Server テーブルにデータが一括インポートされます。Using OPENROWSET(BULK...) as a source table in an INSERT or MERGE statement bulk imports data from a data file into a SQL ServerSQL Server table. 詳しくは、「BULK INSERT または OPENROWSET(BULK...) を使用した一括データのインポート (SQL Server)」をご覧ください。For more information, see Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server) .

  • INSERT ステートメントと共に使用する OPENROWSET BULK オプションでは、BULK 句でテーブル ヒントがサポートされます。When the OPENROWSET BULK option is used with an INSERT statement, the BULK clause supports table hints. TABLOCK などの通常のテーブル ヒントに加えて、BULK 句では、次の特殊なテーブル ヒントを使用できます: IGNORE_CONSTRAINTS (CHECK および FOREIGN KEY 制約のみ無視します)、IGNORE_TRIGGERSKEEPDEFAULTSKEEPIDENTITYIn addition to the regular table hints, such as TABLOCK, the BULK clause can accept the following specialized table hints: IGNORE_CONSTRAINTS (ignores only the CHECK and FOREIGN KEY constraints), IGNORE_TRIGGERS, KEEPDEFAULTS, and KEEPIDENTITY. 詳細については、「テーブル ヒント (Transact-SQL)」を参照してください。For more information, see Table Hints (Transact-SQL).

INSERT...SELECT * FROM OPENROWSET(BULK...) ステートメントの使用方法については、「データの一括インポートと一括エクスポート (SQL Server)」をご覧ください。For information about how to use INSERT...SELECT * FROM OPENROWSET(BULK...) statements, see Bulk Import and Export of Data (SQL Server). 一括インポートによって実行される行挿入操作がトランザクション ログに記録される条件について詳しくは、「 一括インポートで最小ログ記録を行うための前提条件」をご覧ください。For information about when row-insert operations that are performed by bulk import are logged in the transaction log, see Prerequisites for Minimal Logging in Bulk Import.

注意

OPENROWSET を使用するにあたっては、SQL ServerSQL Server で権限借用がどのように処理されるかを理解しておくことが重要です。When you use OPENROWSET, it is important to understand how SQL ServerSQL Server handles impersonation. セキュリティの考慮事項については、「BULK INSERT または OPENROWSET(BULK...) を使用した一括データのインポート (SQL Server)」をご覧ください。For information about security considerations, see Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server).

SQLCHAR、SQLNCHAR、および SQLBINARY データの一括インポートBulk Importing SQLCHAR, SQLNCHAR or SQLBINARY Data

OPENROWSET(BULK...) では、指定がない場合、SQLCHAR、SQLNCHAR、および SQLBINARY データの最大の長さが 8000 バイトを超えないものと想定されます。OPENROWSET(BULK...) assumes that, if not specified, the maximum length of SQLCHAR, SQLNCHAR or SQLBINARY data does not exceed 8000 bytes. インポートされるデータが 8000 バイトを超える varchar(max)nvarchar(max)、または varbinary(max) オブジェクトを含む LOB データ フィールドにある場合、XML フォーマット ファイルを使用してそのデータ フィールドの最大の長さを定義する必要があります。If the data being imported is in a LOB data field that contains any varchar(max), nvarchar(max), or varbinary(max) objects that exceed 8000 bytes, you must use an XML format file that defines the maximum length for the data field. 最大の長さを指定するには、フォーマット ファイルを編集して MAX_LENGTH 属性を宣言します。To specify the maximum length, edit the format file and declare the MAX_LENGTH attribute.

注意

自動生成されたフォーマット ファイルには、LOB フィールドの最大の長さの指定がありません。An automatically generated format file does not specify the length or maximum length for a LOB field. ただし、手作業でフォーマット ファイルを編集して長さまたは最大の長さを指定できます。However, you can edit a format file and specify the length or maximum length manually.

SQLXML ドキュメントの一括エクスポートまたは一括インポートBulk Exporting or Importing SQLXML Documents

SQLXML データを一括エクスポートまたは一括インポートする場合、フォーマット ファイルのデータ型には次のいずれかを使用します。To bulk export or import SQLXML data, use one of the following data types in your format file.

データ型Data type 結果Effect
SQLCHAR または SQLVARYCHARSQLCHAR or SQLVARYCHAR データは、クライアント コード ページまたは照合順序で暗黙的に指定されるコード ページで送られます。The data is sent in the client code page or in the code page implied by the collation).
SQLNCHAR または SQLNVARCHARSQLNCHAR or SQLNVARCHAR データは Unicode として送られます。The data is sent as Unicode.
SQLBINARY または SQLVARYBINSQLBINARY or SQLVARYBIN データは変換なしで送られます。The data is sent without any conversion.

アクセス許可Permissions

OPENROWSET 権限は、OLE DB プロバイダーに渡されるユーザー名の権限によって決まります。OPENROWSET permissions are determined by the permissions of the user name that is being passed to the OLE DB provider. BULK オプションを使用するには、ADMINISTER BULK OPERATIONS 権限が必要です。To use the BULK option requires ADMINISTER BULK OPERATIONS permission.

使用例Examples

A.A. OPENROWSET を SELECT および SQL Server Native Client OLE DB プロバイダーと共に使用するUsing OPENROWSET with SELECT and the SQL Server Native Client OLE DB Provider

次の例では、SQL ServerSQL Server Native Client OLE DB プロバイダーを使用して、リモート サーバー HumanResources.Department のデータベース AdventureWorks2012AdventureWorks2012 のテーブル Seattle1 にアクセスします The following example uses the SQL ServerSQL Server Native Client OLE DB provider to access the HumanResources.Department table in the AdventureWorks2012AdventureWorks2012 database on the remote server Seattle1. (SQLNCLI を使用すると、SQL ServerSQL Server により最新バージョンの SQL ServerSQL Server Native Client OLE DB プロバイダーにリダイレクトされます)。SELECT ステートメントは、返す行セットの定義に使用します。(Use SQLNCLI and SQL ServerSQL Server will redirect to the latest version of SQL ServerSQL Server Native Client OLE DB Provider.) A SELECT statement is used to define the row set returned. プロバイダーの文字列には、ServerTrusted_Connection キーワードが含まれます。The provider string contains the Server and Trusted_Connection keywords. これらのキーワードは、SQL ServerSQL Server Native Client OLE DB プロバイダーによって認識されます。These keywords are recognized by the SQL ServerSQL Server Native Client OLE DB provider.

SELECT a.*  
FROM OPENROWSET('SQLNCLI', 'Server=Seattle1;Trusted_Connection=yes;',  
     'SELECT GroupName, Name, DepartmentID  
      FROM AdventureWorks2012.HumanResources.Department  
      ORDER BY GroupName, Name') AS a;  

B.B. Microsoft OLE DB Provider for Jet を使用するUsing the Microsoft OLE DB Provider for Jet

次の例では、MicrosoftMicrosoft OLE DB Provider for Jet を介して、MicrosoftMicrosoft Access Northwind データベース内のテーブル Customers にアクセスします。The following example accesses the Customers table in the MicrosoftMicrosoft Access Northwind database through the MicrosoftMicrosoft OLE DB Provider for Jet.

注意

この例では、Access がインストールされていることを前提としています。This example assumes that Access is installed. この例を実行するには、Northwind データベースをインストールする必要があります。To run this example, you must install the Northwind database.

SELECT CustomerID, CompanyName  
   FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',  
      'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';  
      'admin';'',Customers);  
GO  

重要

Azure SQL Database では、Windows ファイルからの読み取りはサポートされません。Azure SQL Database does not support reading from Windows files.

C.C. OPENROWSET と INNER JOIN 内の別のテーブルを使用するUsing OPENROWSET and another table in an INNER JOIN

次の例では、ローカル インスタンスの SQL ServerSQL Server Northwind データベース内の Customers テーブル 、および同じコンピューター上に格納されている Access Northwind データベースのテーブル Orders から、すべてのデータを選択します。The following example selects all data from the Customers table from the local instance of SQL ServerSQL Server Northwind database and from the Orders table from the Access Northwind database stored on the same computer.

注意

この例では、Access がインストールされていることを前提としています。This example assumes that Access is installed. この例を実行するには、Northwind データベースをインストールする必要があります。To run this example, you must install the Northwind database.

USE Northwind  ;  
GO  
SELECT c.*, o.*  
FROM Northwind.dbo.Customers AS c   
   INNER JOIN OPENROWSET('Microsoft.Jet.OLEDB.4.0',   
   'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';'admin';'', Orders)      
   AS o   
   ON c.CustomerID = o.CustomerID ;  
GO  

重要

Azure SQL Database では、Windows ファイルからの読み取りはサポートされません。Azure SQL Database does not support reading from Windows files.

D.D. OPENROWSET を使用して、ファイル データを varbinary(max) 列に一括挿入するUsing OPENROWSET to bulk insert file data into a varbinary(max) column

次の例では、小さなテーブルを作成し、ルート ディレクトリ C: にあるファイル Text1.txt から varbinary(max) 列にファイル データを挿入します。The following example creates a small table for demonstration purposes, and inserts file data from a file named Text1.txt located in the C: root directory into a varbinary(max) column.

USE AdventureWorks2012;  
GO  
CREATE TABLE myTable(FileName nvarchar(60),   
  FileType nvarchar(60), Document varbinary(max));  
GO  
  
INSERT INTO myTable(FileName, FileType, Document)   
   SELECT 'Text1.txt' AS FileName,   
      '.txt' AS FileType,   
      * FROM OPENROWSET(BULK N'C:\Text1.txt', SINGLE_BLOB) AS Document;  
GO  

重要

Azure SQL Database では、Windows ファイルからの読み取りはサポートされません。Azure SQL Database does not support reading from Windows files.

E.E. OPENROWSET BULK プロバイダーをフォーマット ファイルと共に使用して、テキスト ファイルから行を取得するUsing the OPENROWSET BULK provider with a format file to retrieve rows from a text file

次の例では、フォーマット ファイルを使用して、タブ区切りのテキスト ファイル values.txt から行を取得します。このテキスト ファイルには次のデータが含まれます。The following example uses a format file to retrieve rows from a tab-delimited text file, values.txt that contains the following data:

1     Data Item 1  
2     Data Item 2  
3     Data Item 3  

フォーマット ファイル values.fmt では、values.txt の列が次のように表されています。The format file, values.fmt, describes the columns in values.txt:

9.0  
2  
1  SQLCHAR  0  10 "\t"        1  ID                SQL_Latin1_General_Cp437_BIN  
2  SQLCHAR  0  40 "\r\n"      2  Description        SQL_Latin1_General_Cp437_BIN  

データを取得するクエリは次のようになります。This is the query that retrieves that data:

SELECT a.* FROM OPENROWSET( BULK 'c:\test\values.txt',   
   FORMATFILE = 'c:\test\values.fmt') AS a;  

重要

Azure SQL Database では、Windows ファイルからの読み取りはサポートされません。Azure SQL Database does not support reading from Windows files.

F.F. フォーマット ファイルとコード ページを指定するSpecifying a format file and code page

次の例では、フォーマット ファイルとコード ページの両方のオプションを同時に使用する方法を示します。The following example show how to use both the format file and code page options at the same time.

INSERT INTO MyTable SELECT a.* FROM  
OPENROWSET (BULK N'D:\data.csv', FORMATFILE =   
    'D:\format_no_collation.txt', CODEPAGE = '65001') AS a;  

G.G. フォーマット ファイルを使用して CSV ファイルのデータにアクセスするAccessing data from a CSV file with a format file

適用対象:SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1。Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.

SELECT *
FROM OPENROWSET(BULK N'D:\XChange\test-csv.csv',
    FORMATFILE = N'D:\XChange\test-csv.fmt', 
    FIRSTROW=2, 
    FORMAT='CSV') AS cars;  

重要

Azure SQL Database では、Windows ファイルからの読み取りはサポートされません。Azure SQL Database does not support reading from Windows files.

H.H. フォーマット ファイルなしで CSV ファイルのデータにアクセスするAccessing data from a CSV file without a format file

SELECT * FROM OPENROWSET(
   BULK 'C:\Program Files\Microsoft SQL Server\MSSQL14.CTP1_1\MSSQL\DATA\inv-2017-01-19.csv',
   SINGLE_CLOB) AS DATA;

重要

Azure SQL Database では、Windows ファイルからの読み取りはサポートされません。Azure SQL Database does not support reading from Windows files.

I.I. Azure Blob Storage に格納されているファイルのデータにアクセスするAccessing data from a file stored on Azure Blob storage

適用対象:SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1。Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
次の例では、Shared Access Signature に対して作成された Azure ストレージ アカウントとデータベース スコープ資格情報のコンテナーを指している外部データ ソースを使用します。The following example uses an external data source that points to a container in an Azure storage account and a database scoped credential created for a shared access signature.

SELECT * FROM OPENROWSET(
   BULK  'inv-2017-01-19.csv',
   DATA_SOURCE = 'MyAzureInvoices',
   SINGLE_CLOB) AS DataFile;

資格情報と外部データ ソースの構成などの OPENROWSET の詳細な例については、「Azure BLOB ストレージのデータに一括アクセスする例」をご覧ください。For complete OPENROWSET examples including configuring the credential and external data source, see Examples of Bulk Access to Data in Azure Blob Storage.

その他の例Additional Examples

INSERT...SELECT * FROM OPENROWSET(BULK...) のその他の使用例については、次のトピックをご覧ください。For additional examples that show using INSERT...SELECT * FROM OPENROWSET(BULK...), see the following topics:

参照See Also

DELETE (Transact-SQL) DELETE (Transact-SQL)
FROM (Transact-SQL) FROM (Transact-SQL)
データの一括インポートと一括エクスポート (SQL Server) Bulk Import and Export of Data (SQL Server)
INSERT (Transact-SQL) INSERT (Transact-SQL)
OPENDATASOURCE (Transact-SQL) OPENDATASOURCE (Transact-SQL)
OPENQUERY (Transact-SQL) OPENQUERY (Transact-SQL)
行セット関数 (Transact-SQL) Rowset Functions (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
sp_addlinkedserver (Transact-SQL) sp_addlinkedserver (Transact-SQL)
sp_serveroption (Transact-SQL) sp_serveroption (Transact-SQL)
UPDATE (Transact-SQL) UPDATE (Transact-SQL)
WHERE (Transact-SQL)WHERE (Transact-SQL)