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

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric のウェアハウスMicrosoft Fabric の SQL データベース

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

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

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

文字形式の使用に関する考慮事項

文字形式を使用する場合は、次の点を考慮してください。

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

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

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

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

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

  • ベクター型の列は、文字形式への変換または文字形式からの変換をサポートしていません。 そのため、文字形式での ベクター 列の一括インポートまたはエクスポートはサポートされていません。

文字フォーマットのコマンドオプション

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

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

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

1 以前のバージョンの SQL Server クライアントと互換性のある形式に文字 (-c) データを読み込むには、 -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を使用します。 書式オプションには、 -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;

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