適用対象: 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 ネイティブ形式のコマンド オプション
Unicode ネイティブ形式のデータは、bcp、BULK INSERT、または INSERT ... SELECT * FROM OPENROWSET(BULK...) を使用してテーブルにインポートすることができます。bcp や BULK INSERT ステートメントについては、ステートメント内にデータ形式を指定することができます。 INSERT ...SELECT * FROM OPENROWSET(BULK...) ステートメントの場合は、フォーマット ファイルでデータ形式を指定する必要があります。
Unicode ネイティブ形式は、次のコマンド オプションでサポートされています。
command | オプション | 説明 |
---|---|---|
bcp | -N | bcp ユーティリティで Unicode ネイティブ形式が使用されるようにします。Unicode ネイティブ形式では、すべての非文字データに対してネイティブ (データベース) データ型が使用され、すべての文字 (char、 nchar、 varchar、 nvarchar、 text、 ntext) データに対して Unicode 文字データ形式が使用されます。 |
BULK INSERT | DATAFILETYPE ='widenative' | データの一括インポート時に Unicode ネイティブ形式を使用します。 |
OPENROWSET | 該当なし | フォーマット ファイルを使用する必要があります |
Note
また、フォーマット ファイルでフィールドごとに形式を指定することもできます。 詳細については、「データのインポートまたはエクスポート用のフォーマット ファイル (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)