Unicode ネイティブ形式を使用したデータのインポートまたはエクスポート

Unicode ネイティブ形式は、SQL Server のインストール環境間で情報をコピーする必要がある場合に役立ちます。非文字データに対してネイティブ形式を使用すると、時間を節約でき、文字形式との間でデータ型の不要な変換が行われなくなります。すべての文字データに対して Unicode 文字形式を使用すると、異なるコード ページを使用している複数のサーバー間でデータを一括転送するときに、拡張文字の損失を防ぐことができます。Unicode ネイティブ形式のデータ ファイルは、すべての一括インポート方法で読み取ることができます。

拡張文字や DBCS 文字を含むデータ ファイルを使用して SQL Server の複数のインスタンス間でデータを一括転送する場合は、Unicode ネイティブ形式を使用することをお勧めします。非文字データの場合、Unicode ネイティブ形式ではネイティブ (データベース) データ型が使用されます。char、nchar、varchar、nvarchar、text、varchar(max)、nvarchar(max)、ntext などの文字データの場合、Unicode ネイティブ形式では Unicode 文字データ形式が使用されます。

Unicode ネイティブ形式のデータ ファイルに SQLVARIANT として格納される sql_variant データは、ネイティブ形式のデータ ファイルに格納される場合と同様に動作します。ただし、char と varchar の値がそれぞれ nchar と nvarchar に変換される点を除きます。この場合、影響を受ける列で 2 倍のストレージが必要になります。元のメタデータは保持され、値はテーブル列に一括インポートされるときに、元の char データ型や varchar データ型に再び変換されます。

注意

ネイティブ形式の詳細については、「ネイティブ形式を使用したデータのインポートまたはエクスポート」を参照してください。

Unicode ネイティブ形式のコマンド オプション

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

Unicode ネイティブ形式は、次のオプションでサポートされています。

コマンド

オプション

説明

bcp

-N

bcp ユーティリティで Unicode ネイティブ形式が使用されるようにします。Unicode ネイティブ形式では、すべての非文字データに対してネイティブ (データベース) データ型が使用され、すべての文字 (char、nchar、varchar、nvarchar、text、ntext) データに対して Unicode 文字データ形式が使用されます。

BULK INSERT

DATAFILETYPE ='widenative'

データの一括インポート時に Unicode ネイティブ形式を使用します。

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

注意

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

次の例では、bcp を使用してネイティブ データを一括エクスポートする方法と、BULK INSERT を使用して同じデータを一括インポートする方法を説明します。

サンプル テーブル

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

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

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

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

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

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

bcp を使用したネイティブ データの一括エクスポート

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

修飾子

説明

-N

ネイティブ データ型を指定します。

-T

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

次の例では、ネイティブ形式のデータを myTestUniNativeData テーブルから myTestUniNativeData-N.Dat という名前の新しいデータ ファイルに一括エクスポートします。Microsoft Windows コマンド プロンプトで、次のように入力します。

bcp AdventureWorks2008R2..myTestUniNativeData out C:\myTestUniNativeData-N.Dat -N -T

bcp AdventureWorks2008R2..myTestUniNativeData out C:\myTestUniNativeData-N.Dat -N -T

BULK INSERT を使用したネイティブ データの一括インポート

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

USE AdventureWorks2008R2;
GO
BULK INSERT myTestUniNativeData 
    FROM 'C:\myTestUniNativeData-N.Dat' 
   WITH (DATAFILETYPE='widenative'); 
GO
SELECT Col1,Col2,Col3 FROM myTestUniNativeData;
GO

USE AdventureWorks2008R2;
GO
BULK INSERT myTestUniNativeData 
    FROM 'C:\myTestUniNativeData-N.Dat' 
   WITH (DATAFILETYPE='widenative'); 
GO
SELECT Col1,Col2,Col3 FROM myTestUniNativeData;
GO