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

拡張文字や DBCS 文字を含むデータ ファイルを使用して Microsoft SQL Server の複数のインスタンス間でデータを一括転送する場合は、Unicode 文字形式を使用することをお勧めします。Unicode 文字データ形式を使用すると、操作を実行するクライアントで使用しているコード ページとは異なるコード ページを使用して、サーバーからデータをエクスポートできます。このような場合、Unicode 文字形式を使用すると、次の利点があります。

  • 転送元のデータと転送先のデータが Unicode データ型の場合、Unicode 文字形式を使用するとすべての文字データが保持されます。

  • 転送元のデータと転送先のデータが Unicode 以外のデータ型の場合、Unicode 文字形式を使用すると、転送先のデータで表現できない転送元のデータに含まれる拡張文字の損失を最小限に抑えられます。

Unicode 文字形式のデータ ファイルは、Unicode ファイルの規則に従います。ファイルの先頭の 2 バイトは、16 進数の 0xFFFE です。これらのバイトは、バイト順マークとしての役割を果たし、高位のバイトをファイルの先頭に格納するか、最後に格納するかを指定します。

重要な注意事項重要

Unicode 文字データ ファイルを操作するフォーマット ファイルの場合、すべての入力フィールドが Unicode テキスト文字列 (つまり、固定サイズの Unicode 文字列または終端文字が指定された Unicode 文字列) でなければなりません。

Unicode 文字形式のデータ ファイルに格納されている sql_variant データの動作は、char データではなく nchar データとして格納されている点を除いて、文字形式のデータ ファイルの場合と同様になります。文字形式の詳細については、「文字形式を使用したデータのインポートまたはエクスポート」を参照してください。

Unicode 文字形式に用意されている既定以外のフィールド ターミネータまたは行ターミネータを使用するには、「フィールド ターミネータと行ターミネータの指定」を参照してください。

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

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

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

コマンド

オプション

説明

bcp

-w

Unicode 文字形式を使用します。

BULK INSERT

DATAFILETYPE ='widechar'

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

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

注意

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

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

サンプル テーブル

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

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

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

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

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

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

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

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

修飾子

説明

-w

Unicode 文字形式を指定します。

-t,

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

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

-T

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

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

bcp AdventureWorks2008R2..myTestUniCharData out C:\myTestUniCharData-w.Dat -w -t, -T

bcp AdventureWorks2008R2..myTestUniCharData out C:\myTestUniCharData-w.Dat -w -t, -T

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

次の例では、BULK INSERT を使用して、myTestUniCharData-w.Dat データ ファイルのデータを myTestUniCharData テーブルにインポートします。既定以外のフィールド ターミネータ (,) は、ステートメントで宣言する必要があります。SQL Server Management Studio クエリ エディターで、次のコードを実行します。

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

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