BULK INSERT または OPENROWSET(BULK...) を使用した一括データのインポート (SQL Server)Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server)

適用対象: ○SQL Server ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

このトピックでは、 Transact-SQLTransact-SQL の BULK INSERT ステートメントと INSERT...SELECT * FROM OPENROWSET(BULK...) ステートメントを使用して、データ ファイルから SQL ServerSQL Server のテーブルにデータを一括インポートする方法の概要を説明します。This topic provides an overview of how to use the Transact-SQLTransact-SQL BULK INSERT statement and the INSERT...SELECT * FROM OPENROWSET(BULK...) statement to bulk import data from a data file into a SQL ServerSQL Server table. また、BULK INSERT および OPENROWSET(BULK...) を使用する場合のセキュリティの注意点や、リモート データ ソースから一括インポートする方法についても説明します。This topic also describes security considerations for using BULK INSERT and OPENROWSET(BULK...), and using these methods to bulk import from a remote data source.

注意

BULK INSERT または OPENROWSET(BULK...) を使用する場合、SQL ServerSQL Server バージョンで権限の借用がどのように処理されるかを理解しておくことが重要です。When you use BULK INSERT or OPENROWSET(BULK...), it is important to understand how SQL ServerSQL Server version handles impersonation. 詳細については、後の「セキュリティの注意点」を参照してください。For more information, see "Security Considerations," later in this topic.

BULK INSERT ステートメントBULK INSERT statement

BULK INSERT では、データ ファイルからテーブルにデータが読み込まれます。BULK INSERT loads data from a data file into a table. この機能は、 bcp コマンドの in オプションと似ていますが、データ ファイルが SQL ServerSQL Server プロセスによって読み取られる点が異なります。This functionality is similar to that provided by the in option of the bcp command; however, the data file is read by the SQL ServerSQL Server process. BULK INSERT の構文の説明については、「 BULK INSERT (Transact-SQL)」を参照してください。For a description of the BULK INSERT syntax, see BULK INSERT (Transact-SQL).

BULK INSERT の例BULK INSERT examples

OPENROWSET(BULK...)機能OPENROWSET(BULK...) Function

OPENROWSET 一括行セット プロバイダーには、BULK オプションを指定して OPENROWSET 関数を呼び出すことによってアクセスします。The OPENROWSET bulk rowset provider is accessed by calling the OPENROWSET function and specifying the BULK option. OPENROWSET(BULK...) 関数では、OLE DB プロバイダー経由でデータ ファイルなどのリモート データ ソースに接続することで、リモート データにアクセスできます。The OPENROWSET(BULK...) function allows you to access remote data by connecting to a remote data source, such as a data file, through an OLE DB provider.

適用対象: OPENROWSETSQL DatabaseSQL Database では使用できません。Applies to: OPENROWSET is not available in SQL DatabaseSQL Database.

データを一括インポートするには、INSERT ステートメントの SELECT...FROM 句から OPENROWSET(BULK...) を呼び出します。To bulk import data, call OPENROWSET(BULK...) from a SELECT...FROM clause within an INSERT statement. データの一括インポートの基本構文は次のとおりです。The basic syntax for bulk importing data is:

INSERT ...SELECT * FROM OPENROWSET(BULK...)INSERT ... SELECT * FROM OPENROWSET(BULK...)

OPENROWSET(BULK...) を INSERT ステートメント内で使用する場合は、テーブル ヒントがサポートされます。When used in an INSERT statement, OPENROWSET(BULK...) supports table hints. TABLOCK などの通常のテーブル ヒントに加えて、BULK 句では、次の特殊なテーブル ヒントを使用できます:IGNORE_CONSTRAINTS (CHECK 制約のみ無視します)、IGNORE_TRIGGERS、KEEPDEFAULTS、KEEPIDENTITY。In 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 constraints), IGNORE_TRIGGERS, KEEPDEFAULTS, and KEEPIDENTITY. 詳細については、「テーブル ヒント (Transact-SQL)」を参照してください。For more information, see Table Hints (Transact-SQL).

BULK オプションの上記以外の使い方の詳細については、「 OPENROWSET (Transact-SQL)」を参照してください。For information about additional uses of the BULK option, see OPENROWSET (Transact-SQL).

INSERT...SELECT * FROM OPENROWSET(BULK...) ステートメント - 例:INSERT...SELECT * FROM OPENROWSET(BULK...) statements - examples:

セキュリティに関する考慮事項Security considerations

ユーザーが SQL ServerSQL Server ログインを使用する場合は、 SQL ServerSQL Server プロセス アカウントのセキュリティ プロファイルが使用されます。If a user uses a SQL ServerSQL Server login, the security profile of the SQL ServerSQL Server process account is used. SQL Server 認証を使用したログインは、データベース エンジン以外では認証できません。A login using SQL Server authentication cannot be authenticated outside of the Database Engine. そのため、SQL Server 認証を使用したログインによって BULK INSERT コマンドが開始されると、SQL Server プロセス アカウント (SQL Server データベース エンジン サービスで使用されるアカウント) のセキュリティ コンテキストを使用してデータへの接続が行われます。Therefore, when a BULK INSERT command is initiated by a login using SQL Server authentication, the connection to the data is made using the security context of the SQL Server process account (the account used by the SQL Server Database Engine service).

ソース データを正しく読み取るには、SQL Server データベース エンジンで使用されるアカウントに対して、ソース データへのアクセス権を付与する必要があります。To successfully read the source data you must grant the account used by the SQL Server Database Engine, access to the source data. これに対して、 SQL ServerSQL Server ユーザーが Windows 認証を使用してログインした場合、そのユーザーは SQL ServerSQL Server プロセスのセキュリティ プロファイルに関係なく、そのユーザー アカウントでアクセス可能なファイルのみを読み取ることができます。In contrast, if a SQL ServerSQL Server user logs on by using Windows Authentication, the user can read only those files that can be accessed by the user account, regardless of the security profile of the SQL ServerSQL Server process.

たとえば、 SQL ServerSQL Server のインスタンスに Windows 認証を使用してログインしたユーザーを考えます。For example, consider a user who logged in to an instance of SQL ServerSQL Server by using Windows Authentication. ユーザーが BULK INSERT または OPENROWSET を使用してデータ ファイルから SQL ServerSQL Server テーブルにデータをインポートするには、アカウントにデータ ファイルの読み取りアクセス許可が与えられていなければなりません。For the user to be able to use BULK INSERT or OPENROWSET to import data from a data file into a SQL ServerSQL Server table, the user account requires read access to the data file. データ ファイルへのアクセスで、 SQL ServerSQL Server プロセスにそのファイルへのアクセス許可がなくても、ユーザーはそのファイルからテーブルにデータをインポートできます。With access to the data file, the user can import data from the file into a table even if the SQL ServerSQL Server process does not have permission to access the file. SQL ServerSQL Server プロセスにファイル アクセス許可を与える必要はありません。The user does not have to grant file-access permission to the SQL ServerSQL Server process.

SQL ServerSQL Server および MicrosoftMicrosoft Windows では、認証されている Windows ユーザーの資格情報を転送することで、 SQL ServerSQL Server インスタンスから別の SQL ServerSQL Server インスタンスへ接続できるように構成することが可能です。and MicrosoftMicrosoft Windows can be configured to enable an instance of SQL ServerSQL Server to connect to another instance of SQL ServerSQL Server by forwarding the credentials of an authenticated Windows user. この設定を、" 権限借用 " または " 権限委譲" といいます。This arrangement is known as impersonation or delegation. BULK INSERT または OPENROWSET を使用する場合は、 SQL ServerSQL Server バージョンによってユーザーの権限借用のセキュリティがどのように処理されるかを理解しておくことが重要です。Understanding how SQL ServerSQL Server version handle security for user impersonation is important when you use BULK INSERT or OPENROWSET. ユーザーの権限を借用することで、 SQL ServerSQL Server プロセスまたはユーザーのいずれかが使用しているコンピューターとは異なるコンピューターにデータ ファイルを常駐させることができます。User impersonation allows the data file to reside on a different computer than either the SQL ServerSQL Server process or the user. たとえば、 Computer_A 上のユーザーが Computer_B上のデータ ファイルにアクセスでき、資格情報の委任が適切に設定されている場合、このユーザーは、 SQL ServerSQL Server Computer_C 上で実行されているのインスタンスに接続して、 Computer_B上のデータ ファイルにアクセスし、そのファイルから Computer_C上のテーブルにデータを一括インポートできます。For example, if a user on Computer_A has access to a data file on Computer_B, and the delegation of credentials has been set appropriately, the user can connect to an instance of SQL ServerSQL Server that is running on Computer_C, access the data file on Computer_B, and bulk import data from that file into a table on Computer_C.

リモート データ ファイルからの一括インポートBulk importing from a remote data file

BULK INSERT または INSERT...SELECT * FROM OPENROWSET(BULK...) を使用して別のコンピューターからデータを一括インポートするには、データ ファイルを 2 台のコンピューター間で共有している必要があります。To use BULK INSERT or INSERT...SELECT * FROM OPENROWSET(BULK...) to bulk import data from another computer, the data file must be shared between the two computers. 共有データ ファイルを指定するには、UNC (汎用名前付け規則) 名を使用します。UNC 名の一般的な形式は、 \\ Servername \ Sharename \ Path \ _Filename_です。To specify a shared data file, use its universal naming convention (UNC) name, which takes the general form, \\Servername\Sharename\Path\Filename. また、データ ファイルへのアクセスに使用されるアカウントは、リモート ディスク上のファイルの読み取りに必要な権限を持っている必要があります。Additionally, the account used to access the data file must have the permissions that are required for reading the file on the remote disk.

たとえば、次の BULK INSERT ステートメントでは、 SalesOrderDetail というデータ ファイルから AdventureWorks データベースの newdata.txtテーブルにデータの一括インポートを行います。For example, the following BULK INSERT statement bulk imports data into the SalesOrderDetail table of the AdventureWorks database from a data file that is named newdata.txt. このデータ ファイルは、\dailyorders というシステムの salesforce というネットワーク共有ディレクトリの computer2 という共有フォルダーにあります。This data file resides in a shared folder named \dailyorders on a network share directory named salesforce on a system named computer2.

BULK INSERT AdventureWorks2012.Sales.SalesOrderDetail  
   FROM '\\computer2\salesforce\dailyorders\neworders.txt';  
GO  

注意

クライアントが読み取るファイルは SQL ServerSQL Server とは無関係であるため、bcp にはこの制限は適用されません。This restriction does not apply to the bcp utility because the client reads the file independently of SQL ServerSQL Server.

参照See also

INSERT (Transact-SQL) INSERT (Transact-SQL)
SELECT 句 (Transact-SQL) SELECT Clause (Transact-SQL)
データの一括インポートと一括エクスポート (SQL Server) Bulk Import and Export of Data (SQL Server)
OPENROWSET (Transact-SQL) OPENROWSET (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
FROM (Transact-SQL) FROM (Transact-SQL)
bcp ユーティリティ bcp Utility
BULK INSERT (Transact-SQL)BULK INSERT (Transact-SQL)