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

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

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

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

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

このトピックの内容
Unicode ネイティブ形式のコマンド オプション
テスト条件の例
 ● サンプル テーブル
 ● XML 以外のフォーマット ファイルのサンプル
使用例
 ● bcp と Unicode ネイティブ形式を使用したデータのエクスポート
 ● フォーマット ファイルなしで bcp と Unicode ネイティブ形式を使用したデータのインポート
 ● XML 以外のフォーマット ファイルでの bcp と Unicode ネイティブ形式を使用したデータのインポート
 ● フォーマット ファイルなしでの BULK INSERT と Unicode ネイティブ形式の使用
 ● XML 以外のフォーマット ファイルでの BULK INSERT と Unicode ネイティブ形式の使用
 ● XML 以外のフォーマット ファイルでの OPENROWSET と Unicode ネイティブ形式の使用
関連タスク

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

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

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

command オプション 説明
bcp -N bcp ユーティリティで Unicode ネイティブ形式が使用されるようにします。Unicode ネイティブ形式では、すべての非文字データに対してネイティブ (データベース) データ型が使用され、すべての文字 (charncharvarcharnvarchartextntext) データに対して Unicode 文字データ形式が使用されます。
BULK INSERT DATAFILETYPE ='widenative' データの一括インポート時に Unicode ネイティブ形式を使用します。
OPENROWSET 該当なし フォーマット ファイルを使用する必要があります

注意

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

テスト条件の例

このトピックの例は、以下に定義されたテーブルとフォーマット ファイルに基づいています。

サンプル テーブル

次のスクリプトは、 myWidenative という名前のテーブルのテスト データベースを作成し、テーブルにいくつかの初期値を設定します。 Microsoft SQL Server Management Studio (SSMS) で次の Transact-SQL を実行します。

CREATE DATABASE TestDatabase;
GO

USE TestDatabase;
CREATE TABLE dbo.myWidenative ( 
	PersonID smallint NOT NULL,
	FirstName nvarchar(25) NOT NULL,
	LastName nvarchar(30) NOT NULL,
	BirthDate date,
	AnnualSalary money
);

-- Populate table
INSERT TestDatabase.dbo.myWidenative
VALUES 
(1, N'ϴAnthony', N'Grosse', '02-23-1980', 65000.00),
(2, N'❤Alica', N'Fatnowna', '11-14-1963', 45000.00),
(3, N'☎Stella', N'Rossenhain', '03-02-1992', 120000.00);

-- Review Data
SELECT * FROM TestDatabase.dbo.myWidenative;

XML 形式以外のフォーマット ファイルのサンプル

SQL Server は、非 XML 形式と XML 形式の 2 種類のフォーマット ファイルをサポートしています。 XML 以外のフォーマットとは、以前のバージョンの SQL Server でサポートされる従来のフォーマットです。 詳細については、「 XML 以外のフォーマット ファイル (SQL Server) 」を参照してください。 次のコマンドでは、 bcp ユーティリティ を使用し、 myWidenative.fmtのスキーマに基づいて XML 以外のフォーマット ファイル myWidenativeを生成します。 bcp コマンドを使用してフォーマット ファイルを作成するには、 format 引数を指定し、データ ファイルのパスの代わりに nul を使用します。 format オプションには、次に示す -f オプションが必要です。 さらに、この例では、修飾子 c を使用して文字データを指定し、 T を使用して統合セキュリティによる信頼関係接続を指定します。 コマンド プロンプトで、次のコマンドを入力します。

bcp TestDatabase.dbo.myWidenative format nul -f D:\BCP\myWidenative.fmt -T -N

REM Review file
Notepad D:\BCP\myWidenative.fmt

重要

XML 以外のフォーマット ファイルは、キャリッジ リターン\ライン フィードで終わるようにします。 そうしないと、次のエラー メッセージが発生する可能性があります。

SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file

使用例

次の例では、上記で作成したデータベースとフォーマット ファイルを使用します。

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

-N スイッチと OUT コマンドです。 注: この例で作成するデータ ファイルをその後のすべての例で使用します。 コマンド プロンプトで、次のコマンドを入力します。

bcp TestDatabase.dbo.myWidenative OUT D:\BCP\myWidenative.bcp -T -N

REM Review results
NOTEPAD D:\BCP\myWidenative.bcp

フォーマット ファイルなしで bcp と Unicode ネイティブ形式を使用してデータをインポートする方法

-N スイッチと IN コマンドです。 コマンド プロンプトで、次のコマンドを入力します。

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myWidenative;"

REM Import data
bcp TestDatabase.dbo.myWidenative IN D:\BCP\myWidenative.bcp -T -N

REM Review results is SSMS

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

-N および -f スイッチと IN コマンドです。 コマンド プロンプトで、次のコマンドを入力します。

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myWidenative;"

REM Import data
bcp TestDatabase.dbo.myWidenative IN D:\BCP\myWidenative.bcp -f D:\BCP\myWidenative.fmt -T -N

REM Review results is SSMS

フォーマット ファイルなしで BULK INSERT と Unicode ネイティブ形式を使用する方法

DATAFILETYPE 引数です。 Microsoft SQL Server Management Studio (SSMS) で次の Transact-SQL を実行します。

TRUNCATE TABLE TestDatabase.dbo.myWidenative; -- for testing
BULK INSERT TestDatabase.dbo.myWidenative
	FROM 'D:\BCP\myWidenative.bcp'
	WITH (
		DATAFILETYPE = 'widenative'
		);

-- review results
SELECT * FROM TestDatabase.dbo.myWidenative;

XML 形式以外のフォーマット ファイルで BULK INSERT と Unicode ネイティブ形式を使用する方法

FORMATFILE 引数。 Microsoft SQL Server Management Studio (SSMS) で次の Transact-SQL を実行します。

TRUNCATE TABLE TestDatabase.dbo.myWidenative; -- for testing
BULK INSERT TestDatabase.dbo.myWidenative
   FROM 'D:\BCP\myWidenative.bcp'
   WITH (
		FORMATFILE = 'D:\BCP\myWidenative.fmt'
		);

-- review results
SELECT * FROM TestDatabase.dbo.myWidenative;

XML 形式以外のフォーマット ファイルで OPENROWSET と Unicode ネイティブ形式を使用する方法

FORMATFILE 引数。 Microsoft SQL Server Management Studio (SSMS) で次の Transact-SQL を実行します。

TRUNCATE TABLE TestDatabase.dbo.myWidenative;  -- for testing
INSERT INTO TestDatabase.dbo.myWidenative
	SELECT *
	FROM OPENROWSET (
		BULK 'D:\BCP\myWidenative.bcp', 
		FORMATFILE = 'D:\BCP\myWidenative.fmt'  
		) AS t1;

-- review results
SELECT * FROM TestDatabase.dbo.myWidenative;

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

参照

bcp ユーティリティ
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
データ型 (Transact-SQL)