使用 bcp 建立格式檔案 (SQL Server)

適用於:SQL ServerAzure SQL 資料庫Azure SQL 受控執行個體Azure Synapse Analytics

此主題描述如何使用 bcp 公用程式,來建立特定資料表的格式檔案。 格式檔案以指定的資料類型選項 (-n、-c、-w 或 -N) 與資料表或檢視分隔符號為基礎。

當您大量匯入 SQL Server 資料表或從資料表大量匯出資料時,您可使用格式檔案做為彈性系統來寫入資料檔案。 格式檔案幾乎或完全不需要進行編輯,即可符合其他資料格式或從其他軟體程式中讀取資料檔。

限制

bcp bcp.exe用於讀取格式檔的工具()版本必須與建立格式檔時相同或更晚。 例如,SQL Server 2025(17.x)bcp可以讀取由 SQL Server 2022(16.x)bcp產生的版本 16.0 格式檔案,但 SQL Server 2022(16.x)bcp無法讀取由 SQL Server 2025(17.x)bcp產生的版本 17.0 格式檔案。

提示

Azure Synapse Analytics 中不支援此語法,其中包括大量插入。 在 Azure Synapse Analytics 和其他雲端資料庫平台整合中,透過 Azure Data Factory 中的 COPY 陳述式,或使用 COPY INTO 和 PolyBase 等 T-SQL 陳述式來完成資料移動。

建立格式檔案

SQL Server 支援兩種格式檔案:非 XML 格式與 XML 格式。 非 XML 格式是舊版 SQL Server 所支援的原始格式。

一般而言,XML 和非 XML 格式檔案可以互換使用, 但是,仍建議您在格式檔案中使用 XML 語法,因為 XML 比非 XML 格式檔案多了一些優點。

本文中的程式碼範例使用 AdventureWorks2025 或 AdventureWorksDW2025 範例資料庫,您可以從 Azure Data SQL Samples Repository GitHub 存放庫下載這些範例資料庫。 Adventure Works Cycles 是虛構的製造公司,用於示範資料庫概念與案例。

建立格式化檔案

若要建立 bcp 格式檔,請指定 format 參數並使用 nul 代替資料檔案路徑。 format 選項一律需要 -f 選項。

要建立 XML 格式檔案,您必須指定選項, -x 例如 bcp <table_or_view> format nul -f <format_file_name> -x。

若要區分 XML 格式檔案,請使用 MyTable.xml 作為副檔名,例如 .xml。

關於 XML 格式檔案的結構與欄位,請參見 XML 格式檔案。

範例

本節包含說明如何使用 bcp 建立格式檔案的範例。 HumanResources.Department 資料表包含四個資料行: DepartmentID、 Name、 GroupName和 ModifiedDate。

A. 建立字元資料的格式檔

以下範例使用字元資料格式為表格建立格式檔案 HumanResources.Department 。

建立一個名為 Department-c.xml. 的 XML 格式檔案。 格式檔使用非預設欄位終止符(,)。 以下章節展示產生格式檔案的內容。

該 bcp 指令包含以下限定條件。

限定詞 描述
format nul -x -f <format_file> 指定 XML 格式檔案。
-c 指定字元資料。
-t, 指定逗號 (,) 作為欄位結束字元。

注意:如果資料檔案使用預設欄位結束字元 (\t),則不需要 -t 參數。
-T 指定 bcp 使用整合式安全性,透過受信任的連線連接到 SQL Server。 如果你沒有指定 -T,必須先指定 -U 和 -P 才能成功登入。

在 Windows 命令提示字元中,輸入下列 bcp 命令:

bcp AdventureWorks2025.HumanResources.Department format nul -c -x -f Department-c.xml -t, -T

產生的格式檔案 Department-c.xml包含下列 XML 元素:

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
  <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="7"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="24"/>
</RECORD>
<ROW>
  <COLUMN SOURCE="1" NAME="DepartmentID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Name" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="GroupName" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="ModifiedDate" xsi:type="SQLDATETIME"/>
</ROW>
</BCPFORMAT>

關於此格式檔案的語法資訊,請參閱 XML 格式檔案。 關於字元資料的資訊,請參見 使用字元格式來匯入或匯出資料。

B. 建立原生資料的格式化檔案

以下範例使用原生資料型態建立表格格式檔 HumanResources.Department 。

建立一個名為 Department-n.xml. 的 XML 格式檔案。 以下章節展示產生格式檔案的內容。

該 bcp 指令包含以下限定條件。

限定詞 描述
format nul -x -f <format_file> 指定 XML 格式檔案。
-n 指定原生資料類型。
-T 指定 bcp 使用整合式安全性,透過受信任的連線連接到 SQL Server。 如果你沒有指定 -T,必須先指定 -U 和 -P 才能成功登入。

在 Windows 命令提示字元中,輸入下列 bcp 命令:

bcp AdventureWorks2025.HumanResources.Department format nul -x -f Department-n.xml -n -T

產生的格式檔案 Department-n.xml包含下列 XML 元素:

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
  <FIELD ID="1" xsi:type="NativeFixed" LENGTH="2"/>
  <FIELD ID="2" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="NativeFixed" LENGTH="8"/>
</RECORD>
<ROW>
  <COLUMN SOURCE="1" NAME="DepartmentID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Name" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="GroupName" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="ModifiedDate" xsi:type="SQLDATETIME"/>
</ROW>
</BCPFORMAT>

關於此格式檔案的語法資訊,請參閱 XML 格式檔案。 關於如何使用原生資料的資訊,請參見 使用原生格式匯入或匯出資料。

C. 建立 Unicode 原生資料的非 XML 格式檔案

若要針對 HumanResources.Department 資料表的 Unicode 原生資料建立非 XML 格式檔案,請使用下列命令:

bcp AdventureWorks2025.HumanResources.Department format nul -T -N -f Department-n.fmt

欲了解更多如何使用 Unicode 原生資料的資訊,請參閱 「使用 Unicode 原生格式來匯入或匯出資料」。

D. 建立 Unicode 字元資料的非 XML 格式檔案

若要針對使用預設結束字元之 HumanResources.Department 資料表的 Unicode 字元資料建立非 XML 格式檔案,請使用下列命令:

bcp AdventureWorks2025.HumanResources.Department format nul -T -w -f Department-w.fmt

欲了解更多如何使用 Unicode 字元資料的資訊,請參見 使用 Unicode 字元格式來匯入或匯出資料。

E. 使用格式檔案與字碼頁選項

當你使用 bcp formatS 建立格式檔時,它會將關於排序和程式碼頁的資訊寫入格式檔。

下列範例格式檔案屬於具五個資料行的資料表且包含定序。

13.0
5
1  SQLCHAR         0       0       "\t"             1     c_0          Cyrillic_General_CS_AS
2  SQLCHAR         0       0       "\t"             2     c_1          Cyrillic_General_CS_AS
3  SQLCHAR         0       3000    "\t"             3     c_2          Cyrillic_General_CS_AS
4  SQLCHAR         0       5       "\t"             4     c_3          ""
5  SQLCHAR         0       41      "!!!\r\r\n"      5     c_4          ""

如果您嘗試使用 bcp in -c -C65001 -f format_file ...、搭配 BULK INSERT,或使用 OPENROWSET 搭配 FORMATFILE='format_file' CODEPAGE=65001 ... 將資料匯入至 SQL Server,則格式檔中的定序或字碼頁資訊會優先於 65001 選項。

因此,如果你產生格式檔,必須手動刪除格式檔中的彙整資訊,才能開始將資料匯入 SQL Server。

以下範例展示了未包含校對資訊的格式檔。

13.0
5
1  SQLCHAR         0       0       "\t"             1     c_0              ""
2  SQLCHAR         0       0       "\t"             2     c_1              ""
3  SQLCHAR         0       3000    "\t"             3     c_2              ""
4  SQLCHAR         0       5       "\t"             4     c_3              ""
5  SQLCHAR         0       41      "!!!\r\r\n"      5     c_4              ""

將資料欄位對應至資料表欄

由 建立 bcp 的格式檔案會依序描述所有表格欄位。 你可以修改格式檔來重新排列或省略表格欄位。 您可以自訂一個格式檔案,以適應其欄位未直接對應到資料表欄位的資料檔案。 如需詳細資訊,請參閱下列文章: