使用 bcp 指定数据文件中的前缀长度

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

以本机格式将数据大容量导出到数据文件时,为使文件存储空间最为紧凑,bcp 命令将在每个字段前面使用一个或多个字符来指示字段的长度。 这些字符称为“长度前缀字符”。

 

bcp 的前缀长度提示


如果某个交互式 bcp 命令包含不带格式化文件开关 (-f) 或数据格式开关(-n、-c、-w 或 -N)的 in 或 out 选项,则该命令会提示输入每个数据字段的前缀长度,如下所示:

 

Enter prefix length of field <field_name> [<default>]:

 

如果指定 0,则 bcp 提示输入字段的长度(对于字符数据类型)或字段终止符(对于本机非字符类型)。

 

注意

在交互指定 bcp 命令中的所有字段后,该命令会提示您将自己对每个字段的响应保存在一个非 XML 格式化文件中。

 

前缀长度概述


若要存储字段的前缀长度,您需要有足够的字节来表示字段的最大长度。 另外,所需的字节数还取决于文件存储类型、列是否可以为 Null 以及数据是以本机格式还是字符格式存储在数据文件中。 例如,text 或 image 数据类型需要四个前缀字符存储字段长度,而 varchar 数据类型需要两个字符。 在数据文件中,这些长度前缀字符以 SQL Server 的内部二进制数据格式存储。

 

重要提示

使用本机格式时,请使用长度前缀而不要使用字段终止符。 本机格式数据可能会与终止符相冲突,因为本机格式数据文件是以 SQL Server 的内部二进制数据格式存储的。

 

大容量导出时的前缀长度


注意

导出字段时前缀长度提示中提供的默认值指明的是该字段的最有效前缀长度。

 

以空字段表示 Null 值。 若要指示字段为空(表示 NULL),字段前缀应包含值 -1,也就是说,字段前缀至少需要 1 个字节。 请注意,如果某个 SQL Server 表列允许 Null 值,则根据文件存储类型的不同,该列需要的前缀长度为 1 或更大。

 

在大容量导出数据并以本机数据类型或字符格式存储数据时,请使用下表中显示的前缀长度。

 

SQL Server

数据类型

本机格式

非 Null

本机格式

NULL

字符格式

NOT NULL

字符格式

NULL

char

2

2

2

2

varchar

2

2

2

2

nchar

2

2

2

2

nvarchar

2

2

2

2

text

4

4

4

4

ntext

4

4

4

4

binary

2

2

2

2

varbinary

2

2

2

2

image

4

4

4

4

datetime

0

1

0

1

smalldatetime

0

1

0

1

decimal

1

1

1

1

numeric

1

1

1

1

float

0

1

0

1

real

0

1

0

1

int

0

1

0

1

bigint

0

1

0

1

smallint

0

1

0

1

tinyint

0

1

0

1

money

0

1

0

1

smallmoney

0

1

0

1

bit

0

1

0

1

uniqueidentifier

1

1

0

1

timestamp

1

1

1

1

varchar(max)

8

8

8

8

varbinary(max)

8

8

8

8

UDT(用户定义的数据类型)

8

8

8

8

XML

8

8

8

8

 

在 SQL Server 的将来版本中将删除 ntext、text 和 image 数据类型。 请避免在新开发工作中使用这些数据类型,并考虑修改当前使用这些数据类型的应用程序。 请改用 nvarchar(max)、varchar(max) 和 varbinary(max)。

 

大容量导入时的前缀长度


大容量导入数据时,前缀长度为最初创建数据文件时指定的值。 如果数据文件不是通过 bcp 命令创建的,则可能不存在长度前缀字符。 在这种情况下,将前缀长度指定为 0。

 

注意

若要在不是使用 bcp 创建的数据文件中指定前缀长度,请使用本主题前面的大容量导出时的前缀长度中提供的长度。


参考:

https://technet.microsoft.com/zh-CN/library/ms190779



















本文转自UltraSQL51CTO博客,原文链接: http://blog.51cto.com/ultrasql/1628109,如需转载请自行联系原作者

相关实践学习
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
SQL 分布式计算 Hadoop
大数据文件分隔符
大数据文件分隔符
158 0
Zp
|
Oracle 关系型数据库
Oracle 判断某个字段是否包含某个字符或字符串
Oracle 判断某个字段是否包含某个字符或字符串
Zp
1683 0
|
Oracle 关系型数据库 数据库
ORACLE查询编码以及对应的字符长度
ORACLE查询编码以及对应的字符长度
|
SQL Oracle 关系型数据库
Oracle 数据库sql语句修改表字段的字段类型和长度
Oracle 数据库sql语句修改表字段的字段类型和长度
387 0
Oracle 数据库sql语句修改表字段的字段类型和长度
|
SQL Oracle 关系型数据库
[20171206]位图区一定在数据文件开头吗.txt
[20171206]位图区一定在数据文件开头吗.txt --//如果问你oracle数据文件的位图区位于数据文件开头部分吗?我想大家的回答一定,实际上在10g下未必,因为10g建立的数据文件.
1057 0
MSSQL语句批量替换表中某列字段内容的某个字符
UPdate 表 Set 字段名=REPLACE(字段名,'查找目标字符','要替换的字符') 比如:在Products表中把字段CharCode中含有ch-的字符全部替换为dw- UPDATE Products SET CharCode = REPLACE(CharCo...
881 0
|
关系型数据库 Oracle
LOB字段存放在指定表空间 清理CLOB字段及压缩CLOB空间
LOB字段存放在指定表空间 清理CLOB字段及压缩CLOB空间    把LOB字段的SEGMENT 存放在指定表空间、清理CLOB字段及压缩CLOB空间 1、创建LOB字段存放表空间:create tablespace lob_test datafile '/oracle/data/lob_test.
3137 0