在資料檔中指定前置長度
為了讓原生格式的資料大量匯出至資料檔時,能夠有最精簡的檔案儲存方式,bcp 命令在每一個欄位前面都有加上一或多個字元,指出欄位的長度。這些字元稱作「長度前置字元」。
前置長度的 bcp 提示字元
如果互動式 bcp 命令包含 in 或 out 選項,但不包含格式檔案參數 (-f) 或資料格式參數 (-n、-c、-w 或 -N),則命令會提示您提供每個資料欄位的前置長度,如下所示:
Enter prefix length of field <field_name> [<default>]:
如果您指定 0,bcp 會接著提示您輸入欄位的長度 (適用於字元資料類型) 或欄位結束字元 (適用於原生非字元類型)。如需在內容中顯示此提示的範例,請參閱<使用 bcp 指定相容性的資料格式>。
[!附註]
您以互動方式在 bcp 命令中指定所有的欄位後,命令會提示您將每個欄位的回應儲存在非 XML 格式的檔案中。如需有關非 XML 格式檔案的詳細資訊,請參閱<了解非 XML 格式檔案>。
前置長度的概觀
若要儲存欄位的前置長度,您需要有足夠的位元組來表示欄位的最大長度。所需的位元組數目取決於檔案儲存類型、資料行的 Null 屬性,以及資料是以原生或字元格式儲存於資料檔中。例如,text 或 image 資料類型需要四個前置字元來儲存欄位長度,但是 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 |
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 所建立的資料檔中指定前置長度,請使用本主題稍早在「大量匯出的前置長度」中提供的長度。