次の方法で共有


フィールド ターミネータと行ターミネータの指定 (SQL Server)

文字列データ フィールドでは、省略可能なターミネータ文字を使用して、データ ファイルの各フィールドの末尾 ( フィールド ターミネータ を使用) と各行の末尾 ( 行ターミネータを使用) を示すことができます。 ターミネータ文字は、フィールドや行の終了位置と次のフィールドや行の開始位置を、データ ファイルを読み取るプログラムに示す方法の 1 つです。

重要

ネイティブ形式または Unicode ネイティブ形式を使用するときは、フィールド ターミネータではなくプレフィックス長を使用します。 ネイティブ形式のデータ ファイルは MicrosoftSQL Server の内部バイナリ データ形式で格納されるため、ネイティブ形式のデータはターミネータと競合する可能性があります。

ターミネータとしてサポートされる文字

bcp コマンド、BULK INSERT ステートメント、および OPENROWSET 一括行セット プロバイダーでは、フィールド ターミネータまたは行ターミネータとしてさまざまな文字がサポートされます。また、常に、各ターミネータの最初のインスタンスが検索されます。 ターミネータ用にサポートされる文字を次の表に示します。

ターミネータ文字 指定方法
Tab \t

既定のフィールド ターミネータです。
改行文字 \n

既定の行ターミネータです。
キャリッジ リターン/ライン フィード \r
円記号1 \|
Null ターミネータ (非表示ターミネータ)2 \0
任意の印刷可能な文字 (NULL、タブ、改行、およびキャリッジ リターンを除き、制御文字は印刷可能ではありません) (*、A、t、l など)
上に列挙したターミネータ文字の一部または全部を含む 10 文字までの印刷可能な文字列 (**\t**、end、!!!!!!!!!!、\t-\n など)

1 t、n、r、0、および '\0' 文字のみが円記号エスケープ文字を操作して制御文字を生成します。

2 印刷時に null 制御文字 (\0) が表示されない場合でも、データ ファイル内の個別の文字です。 つまり、フィールド ターミネータまたは行ターミネータとして NULL 制御文字を使用することと、フィールド ターミネータまたは行ターミネータをまったく使用しないことは異なります。

重要

データ内にターミネータ文字が出現すると、データではなく、ターミネータとして解釈されます。その文字に続くデータは、次のフィールドまたは次のレコードに属すると解釈されます。 したがって、ターミネータがデータに出現することがないように、注意深くターミネータを選択してください。 たとえば、データに下位サロゲートが含まれている場合、フィールド ターミネータには下位サロゲート フィールド ターミネータは適していません。

行ターミネータの使用

行ターミネータと最後のフィールドのターミネータを兼用できます。 ただし、通常は、行ターミネータを別に指定する方が便利です。 たとえば、表形式の出力を生成するには、各行の最後のフィールドを改行文字 (\n) で終了し、他のすべてのフィールドをタブ文字 (\t) で終了します。 各データ レコードをデータ ファイル内の独自の行に配置するには、行ターミネータに \r\n の組み合わせを指定します。

Note

bcp を対話的に使用し、\n (改行) を行ターミネータとして指定すると、 bcp によって自動的に \r (キャリッジ リターン) 文字が前に付加され、結果的には行ターミネータが \r\n になります。

一括エクスポートのターミネータの指定

charまたはncharデータを一括エクスポートし、既定以外のターミネータを使用する場合は、bcp コマンドにターミネータを指定する必要があります。 次のいずれかの方法で、ターミネータを指定できます。

  • フォーマット ファイルで、フィールドごとにターミネータを指定します。

    Note

    フォーマット ファイルの使用方法の詳細については、「データのインポートまたはエクスポート用のフォーマット ファイル (SQL Server)」を参照してください。

  • フォーマット ファイルを使用しない場合には、次の方法があります。

    • -t スイッチを使用して、行内の最後のフィールドを除くすべてのフィールドのフィールド ターミネータを指定します。および、-r スイッチを使用して、行ターミネータを指定します。

    • -t スイッチを指定しないで、文字形式のスイッチ ( -cまたは -w ) を使用すると、フィールド ターミネータがタブ文字 \t に設定されます。 これは、 -t\t を指定することと同じです。

      Note

      -n (ネイティブ データ) スイッチまたは -N (Unicode ネイティブ) スイッチを指定すると、ターミネータは挿入されません。

    • 対話的な bcp コマンドに、 in オプションまたは out オプションが含まれていて、フォーマット ファイル スイッチ (-f) またはデータ形式スイッチ (-n-c-w、または -N) のいずれも含まれていない場合に、プレフィックス長とフィールド長の指定をしないと、各フィールドのフィールド ターミネータが要求されます。既定ではターミネータは "なし" になっています。

      Enter field terminator [none]:

      通常は、既定値を選択することをお勧めします。 ただし、 char または nchar データ フィールドについては、「ターミネータの使用に関するガイドライン」のサブセクションを参照してください。コンテキストでこのプロンプトを表示する例については、「 bcp (SQL Server) を使用する場合の互換性のためのSpecify データ形式」を参照してください。

      Note

      bcp コマンドですべてのフィールドを対話形式で指定すると、各フィールドへの応答を XML 形式以外のファイルに保存するように要求するプロンプトが表示されます。 XML 以外のフォーマット ファイルに関する詳細については、「XML 以外のフォーマット ファイル (SQL Server)」を参照してください。

ターミネータ使用のガイドライン

状況によっては、char データ フィールドまたは nchar データ フィールドには、ターミネータが役に立つ場合があります。 次に例を示します。

  • プレフィックス長がわからないプログラムにインポートされるデータ ファイル内で NULL 値が含まれるデータ列。

    NULL 値が含まれているすべてのデータ列は、可変長と見なされます。 プレフィックス長がない場合、ターミネータは、データが正しく解釈されるように NULL 値の末尾を識別する必要があります。

  • 多くの列によって領域が部分的にのみ使用されている、長い固定長の列。

    この状況では、ターミネータを指定することで記憶領域が最小限になり、フィールドが可変長として処理されます。

この例では、フィールド ターミネータにコンマ、行ターミネータに改行文字 (\n) を使用して、文字形式で AdventureWorks``HumanResources.Department テーブルから Department-c-t.txt データ ファイルにデータが一括エクスポートされます。

bcp コマンドには、次のスイッチがあります。

Switch 説明
-c データ フィールドが文字データとして読み込まれることを指定します。
-t , コンマ (,) をフィールド ターミネータとして指定します。
-r \n 改行文字を行ターミネータとして指定します。 改行文字は既定の行ターミネータなので省略できます。
-T bcp ユーティリティが統合セキュリティを使用した信頼関係接続を使用して SQL Server に接続することを指定します。 -T を指定しない場合、正常にログインするには -U-P を指定する必要があります。

詳細については、「 bcp Utility」を参照してください。

Microsoft Windows コマンド プロンプトで、次のように入力します。

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

このコマンドにより、それぞれ 4 つのフィールドを持つ 16 個のレコードが含まれる Department-c-t.txtが作成されます。 各フィールドはコンマで区切られています。

一括インポートのターミネータの指定

char データまたは nchar データを一括インポートするときに、一括インポート コマンドではデータ ファイルで使用されているターミネータが認識される必要があります。 次のように、ターミネータの指定方法は一括インポート コマンドによって異なります。

  • bcp

    インポート操作のターミネータの指定には、エクスポート操作と同じ構文を使用します。 詳細については、このトピックの「一括エクスポートのターミネータの指定」を参照してください。

  • BULK INSERT

    次の表に示す修飾子を使用して、フォーマット ファイル内の個別のフィールドまたはデータ ファイル全体にターミネータを指定できます。

    修飾子 説明
    FIELDTERMINATOR ='field_terminator' 文字データ ファイルや Unicode 文字データ ファイルに使用されるフィールド ターミネータを指定します。

    既定値は \t (タブ文字) です。
    ROWTERMINATOR ='row_terminator' 文字データ ファイルや Unicode 文字データ ファイルに使用される行ターミネータを指定します。

    既定値は \n (改行文字) です。

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

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

    OPENROWSET 一括行セット プロバイダーでは、ターミネータを指定できるのはフォーマット ファイルのみです (Large Object データ型を除き、これは必須です)。 文字データ ファイルで既定以外のターミネータが使用されている場合、フォーマット ファイルで定義する必要があります。 詳細については、「フォーマット ファイルの作成 (SQL Server)」と「データの一括インポートでのフォーマット ファイルの使用 (SQL Server)」を参照してください。

    OPENROWSET BULK 句の詳細については、「OPENROWSET (Transact-SQL)」を参照してください。

このセクションの例では、前の例で作成したDepartment-c-t.txt データ ファイルを、AdventureWorks2012 サンプル データベースのmyDepartment テーブルに一括インポートします。 このテーブルを作成しないと、例を実行できません。 dbo スキーマでこのテーブルを作成するには、SQL Server Management Studio のクエリ エディターで次のコードを実行します。

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. bcp を使用した対話的なターミネータの指定

次の例では、 Department-c-t.txt コマンドを使用して、 bcp データ ファイルを一括インポートします。 このコマンドでは、一括エクスポート コマンドと同じコマンド スイッチを使用します。 詳細については、このトピックの「一括エクスポートのターミネータの指定」を参照してください。

Windows コマンド プロンプトで、次のように入力します。

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

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

次の例では、次の表に示す修飾子を指定した Department-c-t.txt ステートメントを使用して、 BULK INSERT データ ファイルを一括インポートします。

オプション Attribute
DATAFILETYPE ='char' データ フィールドが文字データとして読み込まれることを指定します。
FIELDTERMINATOR =',' コンマ (,) をフィールド ターミネータとして指定します。
ROWTERMINATOR ='\n' 改行文字を行ターミネータとして指定します。

SQL Server Management Studio のクエリ エディターで、次のコードを実行します。

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

参照

bcp ユーティリティ
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
bcp を使用したフィールド長の指定 (SQL Server)
bcp を使用したデータ ファイルのプレフィックス長の指定 (SQL Server)
bcp を使用したファイル ストレージ型の指定 (SQL Server)