使用字符格式导入或导出数据

如果将数据大容量导出到要在其他程序中使用的文本文件时,或从其他程序生成的文本文件大容量导入数据时,建议使用字符格式。

注意注意

当您在 MicrosoftSQL Server 的实例之间大容量传输数据,而且数据文件包含 Unicode 字符但不包含任何扩展字符或 DBCS 字符,请使用 Unicode 字符格式。有关详细信息,请参阅使用 Unicode 字符格式导入或导出数据

采用字符格式后,所有列均应用字符数据格式。如果要将数据用于其他程序(如电子表格程序),或需要通过其他数据库供应商(如 Oracle)将数据复制到 SQL Server 实例中,则以字符格式存储信息会非常有用。

使用字符格式的注意事项

使用字符格式时,请考虑下列事项:

  • 默认情况下,bcp 实用工具使用制表符分隔字符数据字段,并用换行符终止记录。有关如何指定其他终止符的信息,请参阅指定字段终止符和行终止符

  • 默认情况下,在大容量导出或导入字符模式数据之前,将执行下列转换:

    大容量操作的方向

    转换

    导出

    将数据转换为字符表示形式。如果进行显式请求,字符列的数据将转换为所请求的代码页。如果未指定代码页,将通过使用客户端计算机的 OEM 代码页对字符数据进行转换。

    导入

    必要时将字符数据转换为本机表示形式,并将字符数据从客户端的代码页转换到目标列的代码页。

  • 为避免在转换期间丢失扩展字符,请使用 Unicode 字符格式或指定代码页。有关使用代码页的详细信息,请参阅在不同排序规则间复制数据

  • 存储在字符格式文件中的所有 sql_variant 数据都是在不包括元数据的情况下进行存储的。每个数据值都将按照隐式数据转换规则转换为 char 格式。当数据导入到 sql_variant 列中时,该数据是以 char 格式导入的。而导入到数据类型不是 sql_variant 的列中时,数据将通过隐式转换从 char 格式转换为其他格式。有关数据转换的详细信息,请参阅数据类型转换(数据库引擎)

  • bcp 实用工具将 money 值作为字符格式数据文件导出时,该数据文件小数点后保留四位数字且不带诸如逗号分隔符之类的数字分组符号。例如,包含值 1,234,567.123456 的 money 列将以字符串 1234567.1235 的形式大容量导出到数据文件中。

字符格式的命令选项

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

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

命令

选项

说明

bcp

-c

使 bcp 实用工具使用字符数据。1

BULK INSERT

DATAFILETYPE ='char'

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

1 若要将字符 (-c) 数据加载为与早期版本的 SQL Server 客户端兼容的格式,请使用 -V 开关。有关详细信息,请参阅导入来自早期版本的 SQL Server 的本机格式数据和字符格式数据

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

注意注意

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

示例

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

示例表

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

USE AdventureWorks;
GO
CREATE TABLE myTestCharData (
   Col1 smallint,
   Col2 nvarchar(50),
   Col3 nvarchar(50)
   ); 

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

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

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

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

限定符

说明

-c

指定字符格式。

-t,

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

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

-T

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

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

bcp AdventureWorks..myTestCharData out C:\myTestCharData-c.Dat -c -t, -T

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

下面的示例使用 BULK INSERT 将 myTestCharData-c.Dat 数据文件中的数据导入到 myTestCharData 表中。在 SQL Server Management Studio 查询编辑器中,执行以下语句:

USE AdventureWorks;
GO
BULK INSERT myTestCharData 
   FROM 'C:\myTestCharData-c.Dat' 
   WITH (
      DATAFILETYPE='char',
      FIELDTERMINATOR=','
   ); 
GO
SELECT Col1,Col2,Col3 FROM myTestCharData;
GO