使用 Unicode 本机格式导入或导出数据 (SQL Server)
当必须将信息从一个 Microsoft SQL Server 安装复制到另一个时,Unicode 本机格式非常有用。 为非字符数据使用本机格式可以节省时间,并消除与字符格式之间不必要的数据类型转换。 在使用不同代码页的服务器之间大容量传输数据时,为所有字符数据使用 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
,这使得受影响列的存储量加倍。 这些值的原始元数据被保留,当大容量导入到表列时,这些值将转换回其原始的 char
和 varchar
数据类型。
Unicode 本机格式的命令选项
可以使用 bcp、BULK INSERT 或 INSERT 将 Unicode 本机格式数据导入表中。SELECT * FROM OPENROWSET (BULK...) 。对于 bcp 命令或 BULK INSERT 语句,可以在命令行上指定数据格式。 对于 INSERT ...SELECT * FROM OPENROWSET(BULK...) 语句,必须在格式化文件中指定数据格式。
下列选项支持 Unicode 本机格式:
Command | 选项 | 说明 |
---|---|---|
bcp | -N | 导致 bcp 实用工具使用 Unicode 本机格式,该格式对所有非字符数据使用本机 (数据库) 数据类型,对所有字符 (char 、、nchar 、varchar nvarchar 、 text 和 ntext ) 数据使用 Unicode 字符数据格式。 |
BULK INSERT | DATAFILETYPE ='wideative' | 大容量导入数据时使用 Unicode 本机格式。 |
有关详细信息,请参阅 bcp 实用工具、 BULK INSERT (Transact-SQL) 或 OPENROWSET (Transact-SQL) 。
注意
或者,您可以在格式化文件中为每个字段指定格式设置。 有关详细信息,请参阅用来导入或导出数据的格式化文件 (SQL Server)。
示例
下列示例演示如何使用 bcp 批量导出本机数据以及使用 BULK INSERT 批量导入相同数据。
示例表
下列示例要求 dbo 架构下的 AdventureWorks 示例数据库中存在名称为 myTestUniNativeData 的表。 必须先创建此表,才能运行这些示例。 在 SQL Server Management Studio 查询编辑器 中,执行:
USE AdventureWorks;
GO
CREATE TABLE myTestUniNativeData (
Col1 smallint,
Col2 nvarchar(50),
Col3 nvarchar(50)
);
若要填充此表并查看得到的内容,请执行以下语句:
INSERT INTO myTestUniNativeData(Col1,Col2,Col3)
VALUES(1,'DataField2','DataField3');
INSERT INTO myTestUniNativeData(Col1,Col2,Col3)
VALUES(2,'DataField2','DataField3');
GO
SELECT Col1,Col2,Col3 FROM myTestUniNativeData
使用 bcp 大容量导出本机数据
若要将表中数据导出到数据文件,请将 bcp 与 out 选项和以下限定符结合使用:
限定符 | 说明 |
---|---|
-N | 指定本机数据类型。 |
-T | 指定 bcp 实用工具通过使用集成安全性的受信任连接连接到 SQL Server 。 如果未指定 -T ,则需要指定 -U 和 -P 才能成功登录。 |
以下示例将本机格式的数据从 myTestUniNativeData
表大容量导出到名为 myTestUniNativeData-N.Dat
的新数据文件中。 在 Microsoft Windows 命令提示符下输入:
bcp AdventureWorks..myTestUniNativeData out C:\myTestUniNativeData-N.Dat -N -T
使用 BULK INSERT 大容量导入本机数据
以下示例使用 BULK INSERT 将 myTestUniNativeData-N.Dat
数据文件中的数据导入到 myTestUniNativeData
表中。 在 SQL Server Management Studio 查询编辑器 中,执行:
USE AdventureWorks;
GO
BULK INSERT myTestUniNativeData
FROM 'C:\myTestUniNativeData-N.Dat'
WITH (DATAFILETYPE='widenative');
GO
SELECT Col1,Col2,Col3 FROM myTestUniNativeData;
GO
Related Tasks
使用数据格式进行大容量导入或大容量导出
另请参阅
bcp 实用工具
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
数据类型 (Transact-SQL)