フィールド ターミネータと行ターミネータの指定 (SQL Server)Specify Field and Row Terminators (SQL Server)

適用対象: ○SQL Server ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

文字列データ フィールドでは、省略可能なターミネータ文字を使用して、データ ファイルの各フィールドの末尾 ( フィールド ターミネータ を使用) と各行の末尾 ( 行ターミネータを使用) を示すことができます。For character data fields, optional terminating characters allow you to mark the end of each field in a data file with a field terminator and the end of each row with a row terminator. ターミネータ文字は、フィールドや行の終了位置と次のフィールドや行の開始位置を、データ ファイルを読み取るプログラムに示す方法の 1 つです。Terminating characters are one way to indicate to programs that read the data file where one field or row ends and another field or row begins.

重要

ネイティブ形式または Unicode ネイティブ形式を使用するときは、フィールド ターミネータではなくプレフィックス長を使用します。When you use native or Unicode native format, use length prefixes rather than field terminators. ネイティブ形式のデータ ファイルは MicrosoftMicrosoftSQL ServerSQL Server の内部バイナリ データ形式で格納されるので、ネイティブ形式のデータがターミネータと競合することがあります。Native format data can conflict with terminators because a native-format data file is stored in the MicrosoftMicrosoftSQL ServerSQL Server internal binary data format.

ターミネータとしてサポートされる文字Characters Supported As Terminators

bcp コマンド、BULK INSERT ステートメント、および OPENROWSET 一括行セット プロバイダーでは、フィールド ターミネータまたは行ターミネータとしてさまざまな文字がサポートされます。また、常に、各ターミネータの最初のインスタンスが検索されます。The bcp command, BULK INSERT statement, and the OPENROWSET bulk rowset provider support a variety of characters as field or row terminators and always look for the first instance of each terminator. ターミネータ用にサポートされる文字を次の表に示します。The following table lists the supported characters for terminators.

ターミネータ文字Terminating character 指定方法Indicated by
タブTab \t\t

既定のフィールド ターミネータです。This is the default field terminator.
改行文字Newline character \n\n

既定の行ターミネータです。This is the default row terminator.
キャリッジ リターン/ライン フィードCarriage return/line feed \r\r
円記号*Backslash* \|
NULL ターミネータ (表示されないターミネータ)**Null terminator (nonvisible terminator)** \0\0
任意の印刷可能な文字 (NULL、タブ、改行、およびキャリッジ リターンを除き、制御文字は印刷可能ではありません)Any printable character (control characters are not printable, except null, tab, newline, and carriage return) (*、A、t、l など)(*, A, t, l, and so on)
上に列挙したターミネータ文字の一部または全部を含む 10 文字までの印刷可能な文字列String of up to 10 printable characters, including some or all of the terminators listed earlier (**\t**、end、!!!!!!!!!!、\t-\n など)(**\t**, end, !!!!!!!!!!, \t-\n, and so on)

*円記号のエスケープ文字と共に制御文字として機能するのは、t、n、r、0 および '\0' だけです。*Only the t, n, r, 0 and '\0' characters work with the backslash escape character to produce a control character.

**印刷時には NULL 制御文字 (\0) が表示されませんが、データ ファイルでは 1 つの文字です。**Even though the null control character (\0) is not visible when printed, it is a distinct character in the data file. つまり、フィールド ターミネータまたは行ターミネータとして NULL 制御文字を使用することと、フィールド ターミネータまたは行ターミネータをまったく使用しないことは異なります。This means that using the null control character as a field or row terminator is different than having no field or row terminator at all.

重要

データ内にターミネータ文字が出現すると、データではなく、ターミネータとして解釈されます。その文字に続くデータは、次のフィールドまたは次のレコードに属すると解釈されます。If a terminator character occurs within the data, it is interpreted as a terminator, not as data, and the data after that character is interpreted as belonging to the next field or record. したがって、ターミネータがデータに出現することがないように、注意深くターミネータを選択してください。Therefore, choose your terminators carefully to make sure that they never appear in your data. たとえば、データに下位サロゲートが含まれている場合、フィールド ターミネータには下位サロゲート フィールド ターミネータは適していません。For example, a low surrogate field terminator would not be a good choice for a field terminator if the data contains that low surrogate.

行ターミネータの使用Using Row Terminators

行ターミネータと最後のフィールドのターミネータを兼用できます。The row terminator can be the same character as the terminator for the last field. ただし、通常は、行ターミネータを別に指定する方が便利です。Generally, however, a distinct row terminator is useful. たとえば、表形式の出力を生成するには、各行の最後のフィールドを改行文字 (\n) で終了し、他のすべてのフィールドをタブ文字 (\t) で終了します。For example, to produce tabular output, terminate the last field in each row with the newline character (\n) and all other fields with the tab character (\t). 各データ レコードをデータ ファイル内の独自の行に配置するには、行ターミネータに \r\n の組み合わせを指定します。To place each data record on its own line in the data file, specify the combination \r\n as the row terminator.

注意

bcp を対話的に使用し、\n (改行) を行ターミネータとして指定すると、 bcp によって自動的に \r (キャリッジ リターン) 文字が前に付加され、結果的には行ターミネータが \r\n になります。When you use bcp interactively and specify \n (newline) as the row terminator, bcp automatically prefixes it with a \r (carriage return) character, which results in a row terminator of \r\n.

一括エクスポートのターミネータの指定Specifying Terminators for Bulk Export

char データまたは nchar データを一括エクスポートするときに、既定のターミネータ以外を使用する場合、 bcp コマンドに対してターミネータを指定する必要があります。When you bulk export char or nchar data, and want to use a non-default terminator, you must specify the terminator to the bcp command. 次のいずれかの方法で、ターミネータを指定できます。You can specify terminators in any of the following ways:

  • フォーマット ファイルで、フィールドごとにターミネータを指定します。With a format file that specifies the terminator on a field-by-field basis.

    注意

    フォーマット ファイルの使用方法の詳細は、「データのインポートまたはエクスポート用のフォーマット ファイル (SQL Server)」を参照してください。For information about how to use format files, see Format Files for Importing or Exporting Data (SQL Server).

  • フォーマット ファイルを使用しない場合には、次の方法があります。Without a format file, the following alternatives exist:

    • -t スイッチを使用して、行内の最後のフィールドを除くすべてのフィールドのフィールド ターミネータを指定します。さらに、 -r スイッチを使用して、行ターミネータを指定します。Using the -t switch to specify the field terminator for all the fields except the last field in the row and using the -r switch to specify a row terminator.

    • -t スイッチを指定しないで、文字形式のスイッチ ( -cまたは -w ) を使用すると、フィールド ターミネータがタブ文字 \t に設定されます。Using a character-format switch (-c or -w) without the -t switch, which sets the field terminator to the tab character, \t. これは、 -t\t を指定することと同じです。This is the same as specifying -t\t.

      注意

      -n (ネイティブ データ) スイッチまたは -N (Unicode ネイティブ) スイッチを指定すると、ターミネータは挿入されません。If you specify the -n (native data) or -N (Unicode native) switch, terminators are not inserted.

    • 対話的な bcp コマンドに、 in オプションまたは out オプションが含まれていて、フォーマット ファイル スイッチ ( -f) またはデータ形式スイッチ ( -n-c-w、または -N) のいずれも含まれていない場合に、プレフィックス長とフィールド長の指定をしないと、各フィールドのフィールド ターミネータが要求されます。既定ではターミネータは "なし" になっています。If an interactive bcp command contains the in or out option without either the format file switch (-f) or a data-format switch (-n, -c, -w, or -N), and you have chosen not to specify prefix length and field length, the command prompts for the field terminator of each field, with a default of none:

      Enter field terminator [none]:

      通常は、既定値を選択することをお勧めします。Generally, the default is a suitable choice. ただし、 char データ フィールドまたは nchar データ フィールドについては、次の「ターミネータ使用のガイドライン」を参照してください。However, for char or nchar data fields, see the following subsection, "Guidelines for Using Terminators." コンテキスト内でこのプロンプトが表示される例については、「bcp を使用した互換性のためのデータ形式の指定 (SQL Server)」を参照してください。For an example that shows this prompt in context, see Specify Data Formats for Compatibility when Using bcp (SQL Server).

      注意

      bcp コマンドですべてのフィールドを対話形式で指定すると、各フィールドへの応答を XML 形式以外のファイルに保存するように要求するプロンプトが表示されます。After you interactively specify all of the fields in a bcp command, the command prompts you save your responses for each field in a non-XML format file. XML 以外のフォーマット ファイルの詳細については、「XML 以外のフォーマット ファイル (SQL Server)」を参照してください。For more information about non-XML format files, see Non-XML Format Files (SQL Server).

ターミネータ使用のガイドラインGuidelines for Using Terminators

状況によっては、 char データ フィールドまたは nchar データ フィールドには、ターミネータが役に立つ場合があります。In some situations, a terminator is useful for a char or nchar data field. 例:For example:

  • プレフィックス長がわからないプログラムにインポートされるデータ ファイル内で NULL 値が含まれるデータ列。For a data column that contains a null value in a data file that will be imported into a program that does not understand the prefix length information.

    NULL 値が含まれているすべてのデータ列は、可変長と見なされます。Any data column that contains a null value is considered variable length. プレフィックス長がない場合、ターミネータは、データが正しく解釈されるように NULL 値の末尾を識別する必要があります。In the absence of prefix lengths, a terminator is necessary to identify the end of a null field, making sure that the data is correctly interpreted.

  • 多くの列によって領域が部分的にのみ使用されている、長い固定長の列。For a long fixed-length column whose space is only partially used by many rows.

    この状況では、ターミネータを指定することで記憶領域が最小限になり、フィールドが可変長として処理されます。In this situation, specifying a terminator can minimize storage space allowing the field to be treated as a variable-length field.

\n を一括エクスポートの行ターミネータとして指定するSpecifying \n as a Row Terminator for Bulk Export

\n を一括エクスポートの行ターミネータとして指定するか、既定の行ターミネータを暗黙的に使用する場合、bcp では復帰と改行の組み合わせ (CRLF) が行ターミネータとして出力されます。When you specify \n as a row terminator for bulk export, or implicitly use the default row terminator, bcp outputs a carriage return-line feed combination (CRLF) as the row terminator. 行ターミネータとして改行文字のみ (LF) を出力する場合 (Unix および Linux コンピュータの標準)、16 進数表記を使用して LF 行ターミネータを指定します。If you want to output a line feed character only (LF) as the row terminator - as is typical on Unix and Linux computers - use hexadecimal notation to specify the LF row terminator. 例:For example:

bcp -r '0x0A'

使用例Examples

この例では、フィールド ターミネータにコンマ、行ターミネータに改行文字 (\n) を使用して、文字形式で AdventureWorks.HumanResources.Department テーブルから Department-c-t.txt データ ファイルにデータが一括エクスポートされます。This example bulk exports the data from the AdventureWorks.HumanResources.Department table to the Department-c-t.txt data file using character format, with a comma as a field terminator and the newline character (\n) as the row terminator.

bcp コマンドには、次のスイッチがあります。The bcp command contains the following switches.

スイッチSwitch [説明]Description
-t-c データ フィールドが文字データとして読み込まれることを指定します。Specifies that the data fields be loaded as character data.
-t ,-t , コンマ (,) をフィールド ターミネータとして指定します。Specifies a comma (,) as the field terminator.
-r \n-r \n 改行文字を行ターミネータとして指定します。Specifies the row terminator as a newline character. 改行文字は既定の行ターミネータなので省略できます。This is the default row terminator, so specifying it is optional.
-T-T bcp ユーティリティが統合セキュリティを使用した信頼関係接続を使用して SQL ServerSQL Server に接続することを指定します。Specifies that the bcp utility connects to SQL ServerSQL Server with a trusted connection using integrated security. -T を指定しない場合、正常にログインするには -U-P を指定する必要があります。If -T is not specified, you need to specify -U and -P to successfully log in.

詳細については、「 bcp Utility」を参照してください。For more information, see bcp Utility.

MicrosoftMicrosoft Windows コマンド プロンプトで、次のように入力します。At the MicrosoftMicrosoft Windows command prompt enter:

bcp AdventureWorks.HumanResources.Department out C:\myDepartment-c-t.txt -c -t, -r \n -T  

このコマンドにより、それぞれ 4 つのフィールドを持つ 16 個のレコードが含まれる Department-c-t.txtが作成されます。This creates Department-c-t.txt, which contains 16 records with four fields each. 各フィールドはコンマで区切られています。The fields are separated by a comma.

一括インポートのターミネータの指定Specifying Terminators for Bulk Import

char データまたは nchar データを一括インポートするときに、一括インポート コマンドではデータ ファイルで使用されているターミネータが認識される必要があります。When you bulk import char or nchar data, the bulk-import command must recognize the terminators that are used in the data file. 次のように、ターミネータの指定方法は一括インポート コマンドによって異なります。How terminators can be specified depends on the bulk-import command, as follows:

  • bcpbcp

    インポート操作のターミネータの指定には、エクスポート操作と同じ構文を使用します。Specifying terminators for an import operation uses the same syntax as for an export operation. 詳細については、このトピックの「一括エクスポートのターミネータの指定」を参照してください。For more information, see "Specifying Terminators for Bulk Export," earlier in this topic.

  • BULK INSERTBULK INSERT

    次の表に示す修飾子を使用して、フォーマット ファイル内の個別のフィールドまたはデータ ファイル全体にターミネータを指定できます。Terminators can be specified for individual fields in a format file or for the whole data file by using the qualifiers shown in the following table.

    QualifierQualifier [説明]Description
    FIELDTERMINATOR ='field_terminator'FIELDTERMINATOR ='field_terminator' 文字データ ファイルや Unicode 文字データ ファイルに使用されるフィールド ターミネータを指定します。Specifies the field terminator to be used for character and Unicode character data files.

    既定値は \t (タブ文字) です。The default is \t (tab character).
    ROWTERMINATOR ='row_terminator'ROWTERMINATOR ='row_terminator' 文字データ ファイルや Unicode 文字データ ファイルに使用される行ターミネータを指定します。Specifies the row terminator to be used for character and Unicode character data files.

    既定値は \n (改行記号) です。The default is \n (newline character).

    詳細については、「BULK INSERT (Transact-SQL)」を参照してください。For more information, see BULK INSERT (Transact-SQL).

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

    OPENROWSET 一括行セット プロバイダーでは、ターミネータを指定できるのはフォーマット ファイルのみです (Large Object データ型を除き、これは必須です)。For the OPENROWSET bulk rowset provider, terminators can be specified only in the format file (which is required except for large-object data types). 文字データ ファイルで既定以外のターミネータが使用されている場合、フォーマット ファイルで定義する必要があります。If a character data file uses a non-default terminator, it must be defined in the format file. 詳細については、「フォーマット ファイルの作成 (SQL Server) および データの一括インポートでのフォーマット ファイルの使用 (SQL Server)」を参照してください。For more information, see Create a Format File (SQL Server) and Use a Format File to Bulk Import Data (SQL Server).

    OPENROWSET BULK 句の詳細については、「 OPENROWSET (Transact-SQL)を使用) を示すことができます。For more information about the OPENROWSET BULK clause, see OPENROWSET (Transact-SQL).

\n を一括インポートの行ターミネータとして指定するSpecifying \n as a Row Terminator for Bulk Import

\n を一括インポートの行ターミネータとして指定するか、既定の行ターミネータを暗黙的に使用する場合、bcp および BULK INSERT ステートメントでは、復帰と改行の組み合わせ (CRLF) が行ターミネータとして想定されます。When you specify \n as a row terminator for bulk import, or implicitly use the default row terminator, bcp and the BULK INSERT statement expect a carriage return-line feed combination (CRLF) as the row terminator. ソース ファイルで改行文字のみ (LF) が行ターミネータとして使用されている場合 (Unix および Linux コンピュータで生成されたファイルの標準)、16 進数表記を使用して LF 行ターミネータを指定します。If your source file uses a line feed character only (LF) as the row terminator - as is typical in files generated on Unix and Linux computers - use hexadecimal notation to specify the LF row terminator. BULK INSERT ステートメントの例を次に示します。For example, in a BULK INSERT statement:

    ROWTERMINATOR = '0x0A'

使用例Examples

この例では、前述の例で作成された Department-c-t.txt データ ファイルから、 myDepartment サンプル データベースの AdventureWorks2012AdventureWorks2012 テーブルに、文字データを一括インポートします。The examples in this section bulk import character data form the Department-c-t.txt data file created in the preceding example into the myDepartment table in the AdventureWorks2012AdventureWorks2012 sample database. このテーブルを作成しないと、例を実行できません。Before you can run the examples, you must create this table. dbo スキーマでこのテーブルを作成するには、 SQL Server Management StudioSQL Server Management Studio のクエリ エディターで次のコードを実行します。To create this table under the dbo schema, in SQL Server Management StudioSQL Server Management Studio Query Editor, execute the following code:

USE AdventureWorks;  
GO  
DROP TABLE myDepartment;  
CREATE TABLE myDepartment   
(DepartmentID smallint,  
Name nvarchar(50),  
GroupName nvarchar(50) NULL,  
ModifiedDate datetime not NULL CONSTRAINT DF_AddressType_ModifiedDate DEFAULT (GETDATE())  
);  
GO 

A.A. bcp を使用した対話的なターミネータの指定Using bcp to interactively specify terminators

次の例では、 Department-c-t.txt コマンドを使用して、 bcp データ ファイルを一括インポートします。The following example bulk imports the Department-c-t.txt data file using a bcp command. このコマンドでは、一括エクスポート コマンドと同じコマンド スイッチを使用します。This command uses the same command switches as the bulk export command. 詳細については、このトピックの「一括エクスポートのターミネータの指定」を参照してください。For more information, see "Specifying Terminators for Bulk Export," earlier in this topic.

Windows コマンド プロンプトで、次のように入力します。At the Windows command prompt enter:

bcp AdventureWorks..myDepartment in C:\myDepartment-c-t.txt -c -t , -r \n -T  

B.B. BULK INSERT を使用した対話的なターミネータの指定Using BULK INSERT to interactively specify terminators

次の例では、次の表に示す修飾子を指定した Department-c-t.txt ステートメントを使用して、 BULK INSERT データ ファイルを一括インポートします。The following example bulk imports the Department-c-t.txt data file using a BULK INSERT statement that uses the qualifiers shown in the following table.

オプションOption 属性Attribute
DATAFILETYPE =' char 'DATAFILETYPE =' char ' データ フィールドが文字データとして読み込まれることを指定します。Specifies that the data fields be loaded as character data.
FIELDTERMINATOR =' , 'FIELDTERMINATOR =',' コンマ (,) をフィールド ターミネータとして指定します。Specifies a comma (,) as the field terminator.
ROWTERMINATOR =' \n 'ROWTERMINATOR ='\n' 改行文字を行ターミネータとして指定します。Specifies the row terminator as a newline character.

SQL Server Management StudioSQL Server Management Studio のクエリ エディターで、次のコードを実行します。In SQL Server Management StudioSQL Server Management Studio Query Editor, execute the following code:

USE AdventureWorks;  
GO  
BULK INSERT myDepartment FROM 'C:\myDepartment-c-t.txt'  
   WITH (  
      DATAFILETYPE = 'char',  
      FIELDTERMINATOR = ',',  
      ROWTERMINATOR = '\n'  
);  
GO  

参照See Also

bcp Utility bcp Utility
BULK INSERT (Transact-SQL) BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL) OPENROWSET (Transact-SQL)
bcp を使用したフィールド長の指定 (SQL Server) Specify Field Length by Using bcp (SQL Server)
bcp を使用したデータ ファイルのプレフィックス長の指定 (SQL Server) Specify Prefix Length in Data Files by Using bcp (SQL Server)
bcp を使用したファイル ストレージ型の指定 (SQL Server)Specify File Storage Type by Using bcp (SQL Server)