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


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

 

bcp 的前缀长度提示


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

 

Enter prefix length of field []:

 

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

 

注意

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

 

前缀长度概述


若要存储字段的前缀长度,您需要有足够的字节来表示字段的最大长度。 另外,所需的字节数还取决于文件存储类型、列是否可以为 Null 以及数据是以本机格式还是字符格式存储在数据文件中。 例如,text 或 p_w_picpath 数据类型需要四个前缀字符存储字段长度,而 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

p_w_picpath

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 和 p_w_picpath 数据类型。 请避免在新开发工作中使用这些数据类型,并考虑修改当前使用这些数据类型的应用程序。 请改用 nvarchar(max)、varchar(max) 和 varbinary(max)。

 

大容量导入时的前缀长度


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

 

注意

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


参考:

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