共用方式為


使用 Unicode 原生格式匯入或匯出資料 (SQL Server)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

當必須從某個 Microsoft SQL Server 安裝將資訊複製到其他安裝時,Unicode 原生格式很有用。 對非字元的資料使用原生格式可節省時間,消除在資料類型與字元格式之間,不必要的來回轉換。 對所有字元資料使用 Unicode 字元格式,可以防止在使用不同字碼頁的伺服器之間大量傳送資料期間,失去任何擴充字元。 任何大量匯入方法都可以讀取以 Unicode 原生格式表示的資料檔。

建議使用 Unicode 原生格式,在多個 SQL Server 執行個體之間,使用包含擴充字元或 DBCS 字元的資料檔,大量傳送資料。 若是非字元資料,Unicode 原生格式會使用原生 (資料庫) 資料類型。 若是字元資料,如 charncharvarcharnvarchartextvarchar(max)nvarchar(max)ntext,Unicode 原生格式會使用 Unicode 字元資料格式。

以 SQLVARIANT 儲存在 Unicode 原生格式資料檔的 sql_variant 資料,會以它在原生格式資料檔的相同方式操作,不同處是 charvarchar 值會轉換為 ncharnvarchar,這會讓受影響資料行所需的儲存空間量加倍。 原始中繼資料會加以保留,而且在大量匯入資料表資料行時,這些值會轉換回它們的原始 charvarchar 資料類型。

Unicode 原生格式的命令選項

您可以使用 bcpBULK INSERTOPENROWSET BULK,將 Unicode 原生格式資料匯入數據表。

  • 針對 bcp 命令或 BULK INSERT 語句,您可以在 語句中指定資料格式。
  • 針對 OPENROWSET BULK 語句,您必須在格式檔案中指定資料格式。

下列命令選項支援 Unicode 原生格式:

命令 選項 描述
bcp -N bcp讓公用程式使用 Unicode 原生格式,對於所有非字元數據,使用原生(資料庫)數據類型,對於所有字元數據則使用 Unicode 字元數據格式(包括charncharvarcharnvarchartextntext)。
BULK INSERT DATAFILETYPE ='widenative' 使用 Unicode 原生格式大量匯入資料。
OPENROWSET N/A 必須使用格式檔案

注意

或者,您可以在格式檔案中按照每個欄位指定格式。 如需詳細資訊,請參閱匯入或匯出資料使用的格式檔案 (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 格式。 非 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;

使用 BULK INSERT 和 Unicode 原生格式,搭配非 XML 格式檔案

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;

若要使用資料格式進行大容量導入或大容量匯出: