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

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

注意

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

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

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

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

  • bcp ユーティリティは、特に指定しない限り、文字データ フィールド間の区切りにはタブ文字を、レコードの終わりには改行文字を使用します。別のターミネータの指定方法の詳細については、「フィールド ターミネータと行ターミネータの指定」を参照してください。

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

    一括操作の方向

    変換

    エクスポート

    データを文字表現に変換します。明示的に要求された場合は、データが文字の列ごとに要求されたコード ページに変換されます。コード ページが指定されていない場合は、文字データはクライアント コンピューターの OEM コード ページを使用して変換されます。

    インポート

    必要に応じて、文字データをネイティブ表現に変換し、クライアントのコード ページから目的の列のコード ページに変換します。

  • 変換中に拡張文字が失われないようにするには、Unicode 文字形式を使用するか、コード ページを指定します。コード ページの使用に関する詳細については、「異なる照合順序間でのデータのコピー」を参照してください。

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

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

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

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

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

コマンド

オプション

説明

bcp

-c

bcp ユーティリティが文字データを使用するようにします。1

BULK INSERT

DATAFILETYPE ='char'

データの一括インポート時に文字形式を使用します。

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

詳細については、「bcp ユーティリティ」、「BULK INSERT (Transact-SQL)」、または「OPENROWSET (Transact-SQL)」を参照してください。

注意

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

次の例では、bcp を使用して文字データを一括エクスポートする方法と、BULK INSERT を使用してそのデータを一括インポートする方法を示しています。

サンプル テーブル

次の例を実行するには、dbo スキーマに基づいて、myTestCharData という名前のテーブルを AdventureWorks2008R2 サンプル データベースに作成する必要があります。このテーブルを作成しないと、例を実行できません。このテーブルを作成するには、SQL Server Management Studio クエリ エディターで、次のコードを実行します。

USE AdventureWorks2008R2;
GO
CREATE TABLE myTestCharData (
   Col1 smallint,
   Col2 nvarchar(50),
   Col3 nvarchar(50)
   ); 

USE AdventureWorks2008R2;
GO
CREATE TABLE myTestCharData (
   Col1 smallint,
   Col2 nvarchar(50),
   Col3 nvarchar(50)
   ); 

このテーブルを作成し、上記のコードにより生成された内容を表示するには、次のステートメントを実行します。

INSERT INTO myTestCharData(Col1,Col2,Col3)
   VALUES(1,'DataField2','DataField3');
INSERT INTO myTestCharData(Col1,Col2,Col3)
   VALUES(2,'DataField2','DataField3');
GO
SELECT Col1,Col2,Col3 FROM myTestCharData

INSERT INTO myTestCharData(Col1,Col2,Col3)
   VALUES(1,'DataField2','DataField3');
INSERT INTO myTestCharData(Col1,Col2,Col3)
   VALUES(2,'DataField2','DataField3');
GO
SELECT Col1,Col2,Col3 FROM myTestCharData

bcp を使用した文字データの一括エクスポート

テーブルからデータ ファイルにデータをエクスポートするには、bcpout オプションと次の修飾子を組み合わせて使用します。

修飾子

説明

-c

文字形式を指定します。

-t,

コンマ (,) をフィールド ターミネータとして指定します。

注意
既定のフィールド ターミネータは、タブ文字 (\t) です。詳細については、「フィールド ターミネータと行ターミネータの指定」を参照してください。

-T

bcp ユーティリティが統合セキュリティを使用した信頼関係接続を使用して SQL Server に接続することを指定します。-T を指定しない場合、正常にログインするには、-U および -P を指定する必要があります。

次の例では、文字形式のデータを myTestCharData テーブルから myTestCharData-c.Dat という名前の新しいデータ ファイルに一括エクスポートします。このデータ ファイルでは、フィールド ターミネータとしてコンマ (,) が使用されます。Microsoft Windows コマンド プロンプトで、次のように入力します。

bcp AdventureWorks2008R2..myTestCharData out C:\myTestCharData-c.Dat -c -t, -T

bcp AdventureWorks2008R2..myTestCharData out C:\myTestCharData-c.Dat -c -t, -T

BULK INSERT を使用した文字データの一括インポート

次の例では、BULK INSERT を使用して、myTestCharData-c.Dat データ ファイルのデータを myTestCharData テーブルにインポートします。SQL Server Management Studio クエリ エディターで、次のコードを実行します。

USE AdventureWorks2008R2;
GO
BULK INSERT myTestCharData 
   FROM 'C:\myTestCharData-c.Dat' 
   WITH (
      DATAFILETYPE='char',
      FIELDTERMINATOR=','
   ); 
GO
SELECT Col1,Col2,Col3 FROM myTestCharData;
GO

USE AdventureWorks2008R2;
GO
BULK INSERT myTestCharData 
   FROM 'C:\myTestCharData-c.Dat' 
   WITH (
      DATAFILETYPE='char',
      FIELDTERMINATOR=','
   ); 
GO
SELECT Col1,Col2,Col3 FROM myTestCharData;
GO