次の方法で共有


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

適用対象:SQL ServerAzure SQL データベースAzure SQL Managed Instance Azure 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 データは、ネイティブ形式のデータ ファイルと同じように動作します。ただし、 char 値と varchar 値は ncharnvarchar に変換され、影響を受ける列に必要なストレージの量が 2 倍になる点が異なります。 元のメタデータは保持され、値はテーブル列に一括インポートされるときに、元の char データ型や varchar データ型に再び変換されます。

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

bcpBULK INSERT、または OPENROWSET BULK を使用して、Unicode ネイティブ形式のデータをテーブルにインポートできます。

  • bcp コマンドまたは BULK INSERT ステートメントの場合は、ステートメントでデータ形式を指定できます。
  • OPENROWSET BULK ステートメントの場合は、フォーマット・ファイルでデータ形式を指定する必要があります。

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

command オプション 説明
bcp -N bcp ユーティリティで Unicode ネイティブ形式を使用します。この形式では、すべての文字 (charnchar、varcharnvarchartextおよび 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;

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