使用 Unicode 字符格式导入或导出数据 (SQL Server)

使用包含扩展/DBCS 字符的数据文件在多个 SQL Server 实例之间大容量传输数据时,建议使用 Unicode 字符格式。 从服务器导出数据时,Unicode 字符数据格式允许使用与执行该操作的客户端不同的代码页。 在这种情况下,使用 Unicode 字符格式有下列优点:

  • 如果源数据和目标数据的类型为 Unicode,则使用 Unicode 字符格式可以保留所有的字符数据。

  • 如果源数据和目标数据的类型不为 Unicode,则使用 Unicode 字符格式可以尽可能减少丢失源数据中无法在目标数据中表示的扩展字符。

Unicode 字符格式数据文件遵循 Unicode 文件的约定。 该文件的前两个字节为十六进制数字 0xFFFE。 这两个字节用作字节顺序标记,指定在文件中高位字节是存储在前面还是后面。

重要说明重要提示

对于用于 Unicode 字符数据文件的格式化文件,所有输入字段必须为 Unicode 文本字符串(即固定大小 Unicode 字符串或字符终止 Unicode 字符串)。

Unicode 字符格式数据文件中存储的 sql_variant 数据的操作方式与字符格式数据文件中的同类数据的操作方式相同,唯一的不同是该数据存储为 nchar 而不是 char 数据。 有关字符格式的详细信息,请参阅排序规则和 Unicode 支持

若要使用与 Unicode 字符格式提供的默认终止符不同的字段终止符或行终止符,请参阅指定字段终止符和行终止符 (SQL Server)

Unicode 字符格式的命令选项

您可以使用 bcp、BULK INSERT 或 INSERT ... SELECT * FROM OPENROWSET(BULK...) 将字符格式数据导入到表中。 对于 bcp 命令或 BULK INSERT 语句,您可以在命令行中指定数据格式。 对于 INSERT ... SELECT * FROM OPENROWSET(BULK...) 语句,您必须在格式化文件中指定数据格式。

下列命令行选项支持 Unicode 字符格式:

命令

选项

说明

bcp

-w

使用 Unicode 字符格式。

BULK INSERT

DATAFILETYPE = 'widechar'

大容量导入数据时使用 Unicode 字符格式。

有关详细信息,请参阅 bcp 实用工具BULK INSERT (Transact-SQL)OPENROWSET (Transact-SQL)

注意注意

或者,您可以在格式化文件中为每个字段指定格式设置。 有关详细信息,请参阅用来导入或导出数据的格式化文件 (SQL Server)

示例

下列示例显示如何使用 bcp 大容量导出 Unicode 字符数据以及如何使用 BULK INSERT 大容量导入相同的数据。

示例表

这些示例要求在 AdventureWorks2012 示例数据库中的 dbo 架构下创建名为 myTestUniCharData 的表。 必须先创建此表,才能运行这些示例。 若要创建此表,请在 SQL Server Management Studio 查询编辑器中执行以下语句:

USE AdventureWorks2012;
GO
CREATE TABLE myTestUniCharData (
   Col1 smallint,
   Col2 nvarchar(50),
   Col3 nvarchar(50)
   ); 

若要填充此表并查看得到的内容,请执行以下语句:

INSERT INTO myTestUniCharData(Col1,Col2,Col3)
   VALUES(1,'DataField2','DataField3') 
        ,(2,'DataField2','DataField3');
GO
SELECT Col1,Col2,Col3 FROM myTestUniCharData;

使用 bcp 大容量导出 Unicode 字符数据

若要将数据从表导出到数据文件,请将 bcpout 选项及以下限定符一起使用:

限定符

说明

-w

指定 Unicode 字符格式。

-t ,

将逗号 (,) 指定为字段终止符。

注意注意

默认的字段终止符为 Unicode 制表符 (\t)。 有关详细信息,请参阅指定字段终止符和行终止符 (SQL Server)

-T

指定 bcp 实用工具通过使用集成安全性以及可信连接连接到 SQL Server。 如果未指定 -T,则需要指定 -U-P 才能成功登录。

以下示例将 Unicode 字符格式的数据从 myTestUniCharData 表中大容量导出到名为 myTestUniCharData-w.Dat 的新数据文件,此数据文件使用逗号 (,) 作为字段终止符。 在 Microsoft Windows 命令提示符下输入:

bcp AdventureWorks2012..myTestUniCharData out C:\myTestUniCharData-w.Dat -w -t, -T

使用 BULK INSERT 大容量导入 Unicode 字符数据

以下示例使用 BULK INSERT 将 myTestUniCharData-w.Dat 数据文件中的数据导入 myTestUniCharData 表。 必须在语句中声明非默认字段终止符 (,)。 在 SQL Server Management Studio 查询编辑器中,执行:

USE AdventureWorks2012;
GO
BULK INSERT myTestUniCharData 
   FROM 'C:\myTestUniCharData-w.Dat' 
   WITH (
      DATAFILETYPE='widechar',
      FIELDTERMINATOR=','
   ); 
GO
SELECT Col1,Col2,Col3 FROM myTestUniCharData;
GO

相关任务

使用数据格式进行大容量导入或大容量导出

请参阅

参考

bcp 实用工具

BULK INSERT (Transact-SQL)

OPENROWSET (Transact-SQL)

数据类型 (Transact-SQL)

概念

排序规则和 Unicode 支持