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

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

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

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

注意

Microsoft SQL Server のインスタンス間でデータの一括転送を行うときに、データ ファイルに、拡張文字や DBCS 文字を含まない Unicode 文字データが含まれている場合は、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 からのネイティブ形式データおよび文字形式データのインポート」をご覧ください。

注意

また、フォーマット ファイルでフィールドごとに形式を指定することもできます。 詳細については、「データのインポートまたはエクスポート用のフォーマット ファイル (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 ユーティリティ を使用し、 myChar.fmtのスキーマに基づいて XML 以外のフォーマット ファイル myCharを生成します。 bcp コマンドを使用してフォーマット ファイルを作成するには、 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;"

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

-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 からのネイティブ形式データおよび文字形式データのインポート