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

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

bcp 的前缀长度提示

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

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

如果指定 0,则 bcp 提示输入字段的长度(对于字符数据类型)或字段终止符(对于本机非字符类型)。有关在上下文中显示此提示的示例,请参阅使用 bcp 指定数据格式以获得兼容性

注意注意

在以交互方式指定 bcp 命令中的所有字段后,该命令会提示您将自己对每个字段的响应保存在一个非 XML 格式化文件中。有关非 XML 格式化文件的详细信息,请参阅了解非 XML 格式化文件

前缀长度概述

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

重要说明重要提示

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

大容量导出时的前缀长度

注意注意

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

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

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

SQL Server

数据类型

本机格式

非空

本机格式

字符格式

非空

字符格式

char

2

2

2

2

varchar

2

2

2

2

nchar

2

2

2

2

nvarchar

2

2

2

2

text1

4

4

4

4

ntext1

4

4

4

4

binary

2

2

2

2

varbinary

2

2

2

2

image1

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

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

有关详细信息,请参阅以字符格式存储数据

大容量导入时的前缀长度

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

注意注意

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