使用 bcp 指定欄位長度 (SQL Server)
欄位長度會指出以字元格式表現資料所需的最大字元數。 如果數據以原生格式儲存,則已經知道字段長度;例如, int
數據類型需要 4 個字節。 如果您已針對前置長度指出 0,bcp 命令會提示您輸入欄位長度、預設欄位長度,以及欄位長度對包含char
數據之數據檔中數據儲存的影響。
bcp 提示輸入欄位長度
如果互動式 bcp 命令包含 in 或 out 選項,但沒有格式檔案參數 ( -f) 或資料格式參數 ( -n、 -c、 -w 或 -N),此命令就會提示您輸入每個資料欄位的欄位長度,如下所示:
Enter length of field <field_name> [<default>]:
如需在內容中顯示此提示的範例,請參閱使用 bcp 時指定相容性的資料格式 (SQL Server)。
注意
以互動方式在 bcp 命令中指定所有欄位之後,此命令會提示您將每個欄位的回應以非 XML 格式的檔案加以儲存。 如需非 XML 格式檔案的詳細資訊,請參閱非 XML 格式檔案 (SQL Server)。
bcp 命令是否會提示輸入欄位長度,取決於以下數個因素:
當您複製的資料類型沒有固定長度,而且指定前置長度為 0 時, bcp 就會提示輸入欄位長度。
將非字元資料轉換為字元資料時, bcp 會建議足以儲存資料的預設欄位長度。
如果是非字元的檔案儲存類型, bcp 命令就不會提示輸入欄位長度。 該資料會以 Microsoft SQL Server 原生資料表示法 (原生格式) 儲存。
使用預設的欄位長度
一般而言,Microsoft 會建議您接受 bcp 所建議的欄位長度預設值。 已建立字元模式資料檔案時,使用預設的欄位長度可確定不會截斷資料,而且不會發生數值溢位錯誤。
如果指定不正確的欄位長度,就會發生問題。 例如,如果複製數值資料,而對該資料來說指定的欄位長度太短, bcp 公用程式就會印出溢位訊息,而且不會複製該資料。 此外,如果您匯出 datetime
數據並指定字元字串少於 26 個字節的欄位長度, 則 bcp 公用程式會截斷數據而不顯示錯誤訊息。
重要
使用預設的大小選項時,SQL Server 預期會讀取整個字串。 在某些狀況下,使用預設欄位長度卻會導致發生「未預期的檔案結尾」錯誤。 一般而言,當數據檔中只有一部分預期的欄位發生時,就會發生money
此錯誤,例如,當未指定時間元件且小於格式值char
預期的 24 個字元長度datetime
時datetime
//,就會發生此錯誤。datetime
若要避免此種錯誤類型,請使用欄位結束字元或固定長度資料欄位,或指定其他的值以變更預設的欄位長度。
字元檔案儲存的預設欄位長度
下表列出資料的預設欄位長度,以儲存為字元檔案儲存類型。 可為 Null 的資料長度與非 Null 的資料長度相同。
資料類型 | 預設長度 (字元) |
---|---|
char |
該資料行的定義長度 |
varchar |
該資料行的定義長度 |
nchar |
該資料行定義長度的兩倍 |
nvarchar |
該資料行定義長度的兩倍 |
Text |
0 |
ntext |
0 |
bit |
1 |
binary |
該資料行定義長度的兩倍 + 1 |
varbinary |
該資料行定義長度的兩倍 + 1 |
image |
0 |
datetime |
24 |
smalldatetime |
24 |
float |
30 |
real |
30 |
int |
12 |
bigint |
19 |
smallint |
7 |
tinyint |
5 |
money |
30 |
smallmoney |
30 |
decimal |
41* |
numeric |
41* |
uniqueidentifier |
37 |
timestamp |
17 |
varchar(max) |
0 |
varbinary(max) |
0 |
nvarchar(max) |
0 |
UDT | 使用者自訂術語 (UDT) 資料行的長度 |
XML | 0 |
*如需 和 數據類型的詳細資訊decimal
,請參閱 decimal 和 numeric (Transact-SQL) 。numeric
注意
類型的 tinyint
數據行可以有介於 0 到 255 的值;代表該範圍內任何數位所需的字元數上限為三個(代表值 100 到 255)。
原生檔案儲存的預設欄位長度
下表列出資料的預設欄位長度,以儲存為原生檔案儲存類型。 可為 Null 的資料長度與非 Null 的資料長度相同,字元資料永遠都會以字元格式儲存。
資料類型 | 預設長度 (字元) |
---|---|
bit |
1 |
binary |
該資料行的定義長度 |
varbinary |
該資料行的定義長度 |
image |
0 |
datetime |
8 |
smalldatetime |
4 |
float |
8 |
real |
4 |
int |
4 |
bigint |
8 |
smallint |
2 |
tinyint |
1 |
money |
8 |
smallmoney |
4 |
decimal 1 |
* |
numeric 1 |
* |
uniqueidentifier |
16 |
timestamp |
8 |
1 如需 和 numeric
資料類型的詳細資訊decimal
,請參閱 decimal 和 numeric (Transact-SQL) 。
在先前的所有案例中,若要建立一個資料檔案,之後重新載入 SQL Server,以將所佔用的儲存空間保持在最低,請搭配預設的檔案儲存類型與預設的欄位長度和長度前置詞一起使用。
另請參閱
bcp 公用程式
資料類型 (Transact-SQL)
指定欄位與資料列結束字元 (SQL Server)
使用 bcp 指定資料檔的前置長度 (SQL Server)
使用 bcp 指定檔案儲存類型 (SQL Server)
大量匯入期間保留 Null 或使用預設值 (SQL Server)