文字形式を使用したデータのインポートまたはエクスポート (SQL Server)

適用対象:yesSQL Server Analytics Platform System (PDW) YesYesAzure SQL Database Azure SQL Managed Instance yesyesAzure Synapse Analytics (すべてのサポートされているバージョン)

後で別のプログラムで使われるテキスト ファイルにデータを一括エクスポートする場合や、別のプログラムにより生成されたテキスト ファイルからデータを一括インポートする場合は、文字形式の使用をお勧めします。

文字形式では、すべての列に文字データ形式が使用されます。 文字形式で情報を格納すると、スプレッドシートなどの別のプログラムでデータを使用する場合、または Oracle などの別のデータベース ベンダーから SQL Server のインスタンスにデータをコピーする必要がある場合に便利です。

Note

MicrosoftSQL Server のインスタンス間でデータを一括転送する場合、データ ファイルに Unicode 文字データは含まれていますが、拡張文字や DBCS 文字は含めることはできません。Unicode 文字形式を使用します。 詳細については、「Unicode 文字形式を使用したデータのインポートまたはエクスポート (SQL Server)」を参照してください

このトピックの内容
文字形式の使用に関する注意点
文字形式のコマンド オプション
テスト条件の例
 • サンプル テーブル
 XML 以外のフォーマット ファイルのサンプル
使用例
 • bcp と文字形式を使用したデータのエクスポート
 • フォーマット ファイルなしで bcp と文字形式を使用してデータをインポートする
 XML 以外のフォーマット ファイルで bcp と文字形式を使用してデータをインポートする
 • フォーマット ファイルBULK INSERT文字形式と文字形式の使用
 XML 以外BULK INSERTファイルでの文字形式と文字形式の使用
 XML 以外のフォーマット ファイルでの OPENROWSET と文字形式の使用
関連タスク

文字形式の使用に関する注意点

文字形式を使用するときは、以下の点を考慮してください。

  • 既定では、 bcp ユーティリティ は、文字データ フィールド間の区切りにはタブ文字を、レコードの終わりには改行文字を使用します。 代替ターミネータを指定する方法については、「フィールドターミネータと行ターミネータの指定 (SQL Server)」を参照してください

  • 既定では、キャラクター モードのデータの一括エクスポートまたは一括インポートを行う前に、次の変換が実行されます。

    一括操作の方向 変換
    エクスポート データを文字表現に変換します。 明示的に要求された場合は、データが文字の列ごとに要求されたコード ページに変換されます。 コード ページが指定されていない場合は、文字データはクライアント コンピューターの OEM コード ページを使用して変換されます。
    [インポート] 必要に応じて、文字データをネイティブ表現に変換し、クライアントのコード ページから目的の列のコード ページに変換します。
  • 変換中に拡張文字が失われないようにするには、Unicode 文字形式を使用するか、コード ページを指定します。

  • sql_variant データが文字形式ファイルに保存される場合は、メタデータなしで保存されます。 各データ値は、暗黙的なデータ変換の規則に従って char 形式に変換されます。 sql_variant 型の列にインポートされるときは、 char型のデータとしてインポートされます。 sql_variant型以外のデータ型の列にインポートされるときは、暗黙の変換を使用してデータが char から変換されます。 データ変換の詳細については、「データ型変換 (データベース エンジン)」を参照してください

  • bcp ユーティリティmoney 型の値をエクスポートする場合、コンマなどの桁区切り文字で区切らずに、小数点以下 4 桁の文字形式データ ファイルとしてエクスポートします。 たとえば、値 1,234,567.123456 を含む money 型の列は、文字列 1234567.1235 としてデータ ファイルに一括エクスポートされます。

文字形式のコマンド オプション

文字形式のデータは、bcpBULK INSERT、または INSERT ...SELECT * FROM OPENROWSET(BULK...) を使用してテーブルにインポートできますbcp コマンドまたは BULK INSERT ステートメントの場合は、ステートメントでデータ形式を指定できます。 INSERT ...SELECT * FROM OPENROWSET(BULK...) ステートメントの場合は、フォーマット ファイルでデータ形式を指定する必要があります。

文字形式は、次のコマンド オプションでサポートされています。

command オプション 説明
bcp -c bcp ユーティリティが文字データを使用するようにします。*
BULK INSERT DATAFILETYPE ='char' データの一括インポート時に文字形式を使用します。
OPENROWSET 該当なし フォーマット ファイルを使用する必要があります

*以前のバージョンのクライアントと互換性のある形式に文字 (-c) データを読み込むにはSQL Server -V スイッチを使用します。 詳細については、「 以前のバージョンの SQL Server からのネイティブ形式データおよび文字形式データのインポート」をご覧ください。

Note

また、フォーマット ファイルでフィールドごとに形式を指定することもできます。 詳細については、「データのインポートまたはエクスポート用のフォーマット ファイル (SQL Server)」を参照してください

テスト条件の例

このトピックの例は、以下に定義されたテーブルとフォーマット ファイルに基づいています。

サンプル テーブル

次のスクリプトは、 myChar という名前のテーブルのテスト データベースを作成し、テーブルにいくつかの初期値を設定します。 Microsoft SQL Server Management Studio (SSMS) で、次の Transact SQL を実行します。

CREATE DATABASE TestDatabase;
GO

USE TestDatabase;
CREATE TABLE dbo.myChar ( 
   PersonID smallint NOT NULL,
   FirstName varchar(25) NOT NULL,
   LastName varchar(30) NOT NULL,
   BirthDate date,
   AnnualSalary money
   );

-- Populate table
INSERT TestDatabase.dbo.myChar
VALUES 
(1, 'Anthony', 'Grosse', '1980-02-23', 65000.00),
(2, 'Alica', 'Fatnowna', '1963-11-14', 45000.00),
(3, 'Stella', 'Rossenhain', '1992-03-02', 120000.00);

-- Review Data
SELECT * FROM TestDatabase.dbo.myChar;

XML 以外のフォーマット ファイルのサンプル

SQL Server は、非 XML 形式と XML 形式の 2 種類のフォーマット ファイルをサポートしています。 XML 以外のフォーマットとは、以前のバージョンの SQL Server でサポートされる従来のフォーマットです。 詳細については、「 XML 以外のフォーマット ファイル (SQL Server) 」を参照してください。 次のコマンドは 、bcp ユーティリティを使用して、 のスキーマに基づいて xml 以外のフォーマット ファイル を生成します myCharbcp コマンドを使用してフォーマット ファイルを作成するには、 format 引数を指定し、データ ファイルのパスの代わりに nul を使用します。 format オプションには、次に示す -f オプションが必要です。 さらに、この例では、修飾子 c を使用して文字データを指定し、 T を使用して統合セキュリティによる信頼関係接続を指定します。 コマンド プロンプトで、次のコマンドを入力します。

bcp TestDatabase.dbo.myChar format nul -f D:\BCP\myChar.fmt -T -c 

REM Review file
Notepad D:\BCP\myChar.fmt

重要

XML 以外のフォーマット ファイルは、キャリッジ リターン\ライン フィードで終わるようにします。 そうしないと、次のエラー メッセージが発生する可能性があります。

SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file

使用例

次の例では、上記で作成したデータベースとフォーマット ファイルを使用します。

bcp と文字形式を使用したデータのエクスポート

-c スイッチと OUT コマンドです。 注: この例で作成するデータ ファイルをその後のすべての例で使用します。 コマンド プロンプトで、次のコマンドを入力します。

bcp TestDatabase.dbo.myChar OUT D:\BCP\myChar.bcp -T -c

REM Review results
NOTEPAD D:\BCP\myChar.bcp

フォーマット ファイルなしで bcp と文字形式を使用してデータをインポートする

-c スイッチと IN コマンドです。 コマンド プロンプトで、次のコマンドを入力します。

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myChar;"

REM Import data
bcp TestDatabase.dbo.myChar IN D:\BCP\myChar.bcp -T -c

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myChar;"

bcp と文字形式を使用して XML 以外のフォーマット ファイルでデータをインポートする

-c および -f スイッチと IN コマンドです。 コマンド プロンプトで、次のコマンドを入力します。

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myChar;"

REM Import data
bcp TestDatabase.dbo.myChar IN D:\BCP\myChar.bcp -f D:\BCP\myChar.fmt -T

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myChar;"

フォーマット BULK INSERTを使用せずに文字形式と文字形式を使用する

DATAFILETYPE 引数です。 Microsoft SQL Server Management Studio (SSMS) で、次の Transact SQL を実行します。

TRUNCATE TABLE TestDatabase.dbo.myChar; -- for testing
BULK INSERT TestDatabase.dbo.myChar
	FROM 'D:\BCP\myChar.bcp'
	WITH (
		DATAFILETYPE = 'Char'
		);

-- review results
SELECT * FROM TestDatabase.dbo.myChar;

XML BULK INSERT形式ファイルでの文字形式と文字形式の使用

FORMATFILE 引数。 Microsoft SQL Server Management Studio (SSMS) で、次の Transact SQL を実行します。

TRUNCATE TABLE TestDatabase.dbo.myChar; -- for testing
BULK INSERT TestDatabase.dbo.myChar
   FROM 'D:\BCP\myChar.bcp'
   WITH (
		FORMATFILE = 'D:\BCP\myChar.fmt'
		);

-- review results
SELECT * FROM TestDatabase.dbo.myChar;

XML 以外のフォーマット ファイルでの OPENROWSET と文字形式の使用

FORMATFILE 引数。 Microsoft SQL Server Management Studio (SSMS) で、次の Transact SQL を実行します。

TRUNCATE TABLE TestDatabase.dbo.myChar;  -- for testing
INSERT INTO TestDatabase.dbo.myChar
	SELECT *
	FROM OPENROWSET (
		BULK 'D:\BCP\myChar.bcp', 
		FORMATFILE = 'D:\BCP\myChar.fmt'  
		) AS t1;

-- review results
SELECT * FROM TestDatabase.dbo.myChar;

一括インポートまたは一括エクスポートのデータ形式を使用するには

参照

bcp ユーティリティ
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
データ型 (Transact-SQL)
以前のバージョンの SQL Server からのネイティブ形式データおよび文字形式データのインポート