使用 Unicode 本机格式导入或导出数据
当必须将信息从一个 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 ...SELECT * FROM OPENROWSET(BULK...) 将本机格式的数据导入到表中。对于 bcp 命令或 BULK INSERT 语句,您可以在命令行中指定数据格式。对于 INSERT ... SELECT * FROM OPENROWSET(BULK...) 语句,您必须在格式化文件中指定数据格式。
下列选项支持 Unicode 本机格式:
命令 |
选项 |
说明 |
---|---|---|
bcp |
-N |
使 bcp 实用工具使用 Unicode 本机格式,将为所有非字符数据使用本机(数据库)数据类型,为所有字符(char、nchar、varchar、nvarchar、text 和 ntext)数据使用 Unicode 字符数据格式。 |
BULK INSERT |
DATAFILETYPE ='widenative' |
大容量导入数据时使用 Unicode 本机格式。 |
有关详细信息,请参阅 bcp 实用工具、BULK INSERT (Transact-SQL) 或 OPENROWSET (Transact-SQL)。
注意 |
---|
或者,您可以在格式化文件中为每个字段指定格式设置。有关详细信息,请参阅用来导入或导出数据的格式化文件。 |
示例
下列示例演示如何使用 bcp 大容量导出本机数据以及使用 BULK INSERT 大容量导入相同数据。
示例表
下列示例要求 dbo 架构下的 AdventureWorks2008 示例数据库中存在名称为 myTestUniNativeData 的表。必须先创建此表,才能运行这些示例。在 SQL Server Management Studio 查询编辑器中,执行以下语句:
USE AdventureWorks2008R2;
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 AdventureWorks2008R2..myTestUniNativeData out C:\myTestUniNativeData-N.Dat -N -T
使用 BULK INSERT 大容量导入本机数据
以下示例使用 BULK INSERT 将 myTestUniNativeData-N.Dat 数据文件中的数据导入到 myTestUniNativeData 表中。在 SQL Server Management Studio 查询编辑器中,执行以下语句:
USE AdventureWorks2008R2;
GO
BULK INSERT myTestUniNativeData
FROM 'C:\myTestUniNativeData-N.Dat'
WITH (DATAFILETYPE='widenative');
GO
SELECT Col1,Col2,Col3 FROM myTestUniNativeData;
GO