使用格式檔案
使用互動模式大量複製資料時,bcp 工具 + 生產力會提示您儲存有關儲存類型、前置長度、欄位長度以及欄位結束字元和行終止符的資訊。用來儲存資料檔案中每個欄位的格式資訊的檔案稱為格式檔案:
Do you want to save this format information in a file? [Y/n] yHost filename: [bcp.fmt]
儘管格式檔案的預設名稱為 Bcp.fmt,但也可以指定其它檔案名稱。
當將資料檔案中的資料大量複製回 Microsoft SQL Server 執行個體,或在其它時間從表中向外大量複製資料時,可以使用該格式檔案提供預設的資訊,而不必重新指定格式。使用現有的格式檔案將資料大量複製到 SQL Server 執行個體或從 SQL Server 執行個體中向外複製資料時,bcp 不會提示輸入檔案儲存體類型、前置長度、欄位長度以及欄位結束字元,因為 bcp 使用已經記錄的值。
將資料匯入 SQL Server 執行個體時,若要使用以前建立的格式檔案,請使用 bcp 工具 + 生產力的 -f 開關,或 BULK INSERT 語句的 FORMATFILE 子句。例如,若要使用以前建立的格式檔案 (Authors.fmt) 將 New_auth.dat 資料檔案中的內容大量複製到 pubs 資料庫的 authors2 表中,可以使用以下命令:
bcp pubs..authors2 in c:\new_auth.dat -fc:\authors.fmt -Sservername -Usa -Ppassword
BULK INSERT 語句可以使用 bcp 工具 + 生產力儲存的格式檔案。例如:
BULK INSERT pubs..authors2 FROM 'c:\new_auth.dat' WITH (FORMATFILE = 'c:\authors.fmt')
格式檔案是具有特殊結構的以定位字元分隔的文字檔。
下表描述檔案格式結構。
| 欄位 |
描述 |
| 版本 |
bcp 的版本號碼。 |
| 欄位數目 |
資料檔案中欄位的數目。此數目必須對所有行都相同。 |
| 宿主檔案欄位順序 |
資料檔案中每個欄位的位置。行中的第一個欄位為 1,依此類推。 |
| 宿主檔案資料類型 |
資料檔案的特定欄位中儲存的資料類型。對於 ASCII 資料檔案,使用 SQLCHAR;對於原生格式資料檔案,使用預設的資料類型。有關更多資訊,請參見檔案儲存體類型。 |
| 前置長度 |
欄位長度前置詞字元的數目。合法的前置長度為 0、1、2 和 4。若要避免指定長度首碼,請將其設定為 0。如果欄位中包含空值,則必須指定長度首碼。有關更多資訊,請參見前置長度。 |
| 宿主檔案資料長度 |
資料檔案的特定欄位中所儲存的資料類型的最大長度(按位元組計)。有關更多資訊,請參見欄位長度。 |
| 終止符 |
用來分隔資料檔案中各欄位的分隔字元。常用的終止符為逗號 (,)、定位字元 (\t) 和行結束符 (\r\n)。有關更多資訊,請參見欄位結束字元。 |
| 伺服器列順序 |
各列在 SQL Server 表中出現的順序。例如,如果資料檔案中的第四個欄位對應為 SQL Server 表中的第六列,則第四個欄位的伺服器列順序為 6。
在接收資料檔案中的資料時,若要忽略表中的某個列,請將伺服器列順序值設定為 0。 |
| 伺服器列名 |
從 SQL Server 表中擷取的列名。不必使用欄位的實際名稱。唯一的條件就是格式檔案中的該欄位不為空白。 |
| 定序 |
定序用於在大量複製資料檔案中儲存字元和 Unicode 資料。 |
說明 如果資料檔案中不存在某個欄位,可通過將前置長度、欄位長度、伺服器列順序都指定為 0,並且指定無終止符,在向表中匯入列時跳過該列。這種方法實際上表明資料檔案中不存在該資料欄位,伺服器列不應裝載其資料。
有選擇地複製資料
格式檔案提供了將資料檔案中的資料有選擇地大量複製到 SQL Server 執行個體中的方法。這樣,如果資料檔案中的欄位和表中的列之間存在不匹配時,仍允許向表中傳輸資料。當資料檔案中的欄位存在以下情況時,可以使用這種方法:
- 數目少於表中的列數。
- 數目多於表中的列數。
- 與表中各列的順序不同。
通過使用格式檔案,可以將資料大量複製到 SQL Server 執行個體中,而不必在資料檔案中添加或刪除不必要的資料或者重新排序資料檔案中現有的資料。
隨後的三個主題中包含有選擇地複製資料的樣本。為了執行隨後的這些樣本,需要首先在 pubs 資料庫中製作 authors 表的一份複本,名為 authors2。若要製作一份 authors 表的複本,請執行以下命令:
USE pubsGOSELECT * INTO authors2 FROM authorsGO