大容量导入和导出的数据格式 -- 字符格式
应用场景
将数据大容量导出到要在其他程序中使用的文本文件时,或从其他程序生成的文本文件大容量导入数据时,建议使用字符格式。
采用字符格式后,所有列均应用字符数据格式。如果要将数据用于其他程序(如电子表格程序),或需要通过其他数据库供应商(如 Oracle)将数据复制到 SQL Server 实例中,则以字符格式存储信息会非常有用。
注意事项
使用字符格式时,请考虑下列事项:
1. 默认情况下,bcp 实用工具使用制表符分隔字符数据字段,并用换行符终止记录。
2. 默认情况下,在大容量导出或导入字符模式数据之前,将执行下列转换:
大容量操作的方向 |
转换 |
导出 |
将数据转换为字符表示形式。 如果进行显式请求,字符列的数据将转换为所请求的代码页。 如果未指定代码页,将通过使用客户端计算机的 OEM 代码页对字符数据进行转换。 |
导入 |
必要时将字符数据转换为本机表示形式,并将字符数据从客户端的代码页转换到目标列的代码页。 |
3. 为避免在转换期间丢失扩展字符,请使用 Unicode 字符格式或指定代码页。
4. 存储在字符格式文件中的所有 sql_variant 数据都是在不包括元数据的情况下进行存储的。 每个数据值都将按照隐式数据转换规则转换为 char 格式。 当数据导入到 sql_variant 列中时,该数据是以 char 格式导入的。 而导入到数据类型不是 sql_variant 的列中时,数据将通过隐式转换从 char 格式转换为其他格式。
5. 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 实用工具使用字符数据。 |
BULK INSERT |
DATAFILETYPE =‘char‘ |
在大容量导入数据时使用字符格式。 |
若要将字符 (-c) 数据加载为与早期版本的 SQL Server 客户端兼容的格式,请使用 -V 开关。
参考:
https://msdn.microsoft.com/zh-cn/library/ms190919.aspx