利用 bcp 指定資料檔中的前置長度 (SQL Server)

適用於:SQL ServerAzure SQL 資料庫Azure SQL 受控執行個體Azure Synapse AnalyticsMicrosoft Fabric 中的 SQL 資料庫

為了讓原生格式的資料大量匯出至資料檔時,能夠有最精簡的檔案儲存方式, bcp 命令會在每個欄位前面都加上一個或多個字元,指出欄位的長度。 這些字元稱作 「長度前置字元」 (Length prefix characters)。

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 資料表欄位允許空值,該欄位的前綴長度需為 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
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_variant 8 8 8 8
向量 2 2 N/A N/A
  • 未來的 SQL Server 版本將會移除 ntext、text 及 image 資料類型。 請避免在新的開發工作中使用這些資料類型,並規劃修改目前在使用這些資料類型的應用程式。 請改用 nvarchar(max)、 varchar(max)和 varbinary(max) 。

批量匯入的前綴長度

大量匯入資料時,前置長度就是原先建立資料檔時即指定的值。 如果資料檔不是由 bcp 指令建立,長度前綴字元可能不存在。 在此狀況下,可指定 0 做為前置長度。

備註

若要在並非使用 bcp所建立的資料檔中指定前置長度,請使用本主題稍早在 大量匯出的前置長度中提供的長度。