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

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

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

前置長度的 bcp 提示字元

如果互動式 bcp 命令包含 inout 選項,但沒有格式檔案參數 ( -f) 或資料格式參數 ( -n-c-w-N),此命令就會提示您輸入每個資料欄位的前置長度,如下所示:

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

若您指定 0, bcp 會提示您輸入欄位的長度 (適用於字元資料類型) 或欄位結束字元 (適用於原生非字元類型)。

注意

以互動方式在 bcp 命令中指定所有欄位之後,此命令會提示您將每個欄位的回應以非 XML 格式的檔案加以儲存。 如需非 XML 格式檔案的詳細資訊,請參閱非 XML 格式檔案 (SQL Server) (部分機器翻譯)。

前置長度的概觀

若要儲存欄位的前置長度,您需要有足夠的位元組來表示欄位的最大長度。 所需的位元組數目取決於檔案儲存類型、資料行的 Null 屬性,以及資料是以原生或字元格式儲存於資料檔中。 例如, textimage 資料類型需要四個前置字元來儲存欄位長度,但是 varchar 資料類型則需要兩個字元。 在資料檔案中,這些長度前置詞字元會以 SQL Server 的內部二進位資料格式儲存。

重要

在使用原生格式時,請使用長度前置詞,而不是欄位的結束字元。 原生格式資料可能會與結束字元衝突,因為原生格式的資料檔案是以 SQL Server 內部二進位資料格式儲存。

大量匯出的前置長度

注意

您匯出欄位時,前置長度提示所提供的預設值,表示欄位最有效率的前置長度。

Null 值會以空白欄位表示。 為了指出欄位為空白 (代表 NULL),欄位前置包含了值 -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
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_variant 8 8 8 8

*未來版本的 SQL Server 將會移除 ntexttextimage 資料類型。 請避免在新的開發工作中使用這些資料類型,並規劃修改目前在使用這些資料類型的應用程式。 請改用 nvarchar(max)varchar(max)varbinary(max)

大量匯入的前置長度

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

注意

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

另請參閱

bcp 公用程式
資料類型 (Transact-SQL)
使用 bcp 指定欄位長度 (SQL Server)
指定欄位與資料列結束字元 (SQL Server)
使用 bcp 指定檔案儲存類型 (SQL Server)