適用対象:SQL Server
Azure SQL データベース
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Unicode ネイティブ形式は、Microsoft 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 ネイティブ形式のコマンド オプション
bcp、BULK INSERT、または OPENROWSET BULK を使用して、Unicode ネイティブ形式のデータをテーブルにインポートできます。
- bcp コマンドまたは BULK INSERT ステートメントの場合は、ステートメントでデータ形式を指定できます。
- OPENROWSET BULK ステートメントの場合は、フォーマット・ファイルでデータ形式を指定する必要があります。
Unicode ネイティブ形式は、次のコマンド オプションでサポートされています。
command | オプション | 説明 |
---|---|---|
bcp |
-N |
bcp ユーティリティで Unicode ネイティブ形式を使用します。この形式では、すべての文字 (char、nchar、varchar、nvarchar、text、および ntext) データに対して、すべての文字以外のデータにネイティブ (データベース) データ型と Unicode 文字データ形式が使用されます。 |
BULK INSERT |
DATAFILETYPE ='widenative' |
データの一括インポート時に Unicode ネイティブ形式を使用します。 |
OPENROWSET |
該当なし | フォーマット ファイルを使用する必要があります |
注
また、フォーマット ファイルでフィールドごとに形式を指定することもできます。 詳細については、「データをインポートまたはエクスポートするためのフォーマット ファイル (SQL Server)」を参照してください。
テスト条件の例
このトピックの例は、サンプル テーブルの myWidenative
とフォーマット ファイルの myWidenative.fmt
に基づいています。 ローカル ファイル パスをシステム上のローカル ファイル パスに置き換えます。
サンプル テーブル
次のスクリプトでは、テスト データベース ( myWidenative
という名前のテーブル) を作成し、テーブルにいくつかの初期値を設定します。 次の 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
を使用します。 - 書式オプションには、
-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
bcp と Unicode ネイティブ形式を使用して XML 以外のフォーマット ファイルを使用してデータをインポートする
-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;
関連タスク
一括インポートまたは一括エクスポートにデータ形式を使用するには:
- 以前のバージョンの SQL Server からネイティブ形式と文字形式のデータをインポートする
- 文字形式を使用したデータのインポートまたはエクスポート (SQL Server)
- ネイティブ形式を使用したデータのインポートまたはエクスポート (SQL Server)
- Unicode 文字形式を使用してデータをインポートまたはエクスポートする (SQL Server)