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

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

此主題描述如何使用 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 格式檔案多了一些優點。

本文中的程式代碼範例會使用 AdventureWorks2025AdventureWorksDW2025 範例資料庫,您可以從 Microsoft SQL Server 範例和社群專案 首頁下載。 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 資料表包含四個資料行: DepartmentIDNameGroupNameModifiedDate

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