使用 bcp 指定数据文件中的前缀长度 (SQL Server)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsMicrosoft Fabric 中的 SQL 数据库

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

bcp 关于前缀长度的提示

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

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

如果你指定 0,则 bcp 会提示您输入字段长度(用于字符数据类型)或字段终止符(用于本地非字符类型)。

注意

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

前缀长度概述

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

重要

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

批量导出的前缀长度

注意

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

以空字段表示 Null 值。 若要指示字段为空(表示 NULL),字段前缀包含值 -1;也就是说,它至少需要 1 个字节。 如果 SQL Server 表列允许 null 值,则列需要前缀长度为 1 或更大,具体取决于文件存储类型。

在批量导出数据时,无论是以本机数据类型还是字符格式存储,请使用下表显示的前缀长度。

SQL Server
数据类型
本机格式
NOT 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
文本* 4 4 4 4
ntext* 4 4 4 4
binary 2 2 2 2
varbinary 2 2 2 2
图像* 4 4 4 4
datetime 0 1 0 1
smalldatetime 0 1 0 1
小数 1 1 1 1
numeric 1 1 1 1
float 0 1 0 1
真实 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
比特 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_variant 8 8 8 8
矢量 2 2 N/A N/A
  • ntext、text和image数据类型将在未来版本的SQL Server中被删除。 请避免在新开发工作中使用这些数据类型,并考虑修改当前使用这些数据类型的应用程序。 请改用 nvarchar(max)、 varchar(max)和 varbinary(max) 。

批量导入的前缀长度

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

注意

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