適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
Analytics 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 格式檔案多了一些優點。
本文中的程式代碼範例會使用 AdventureWorks2025 或 AdventureWorksDW2025 範例資料庫,您可以從 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 資料表包含四個資料行: 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 的格式檔案會依序描述所有表格欄位。 你可以修改格式檔來重新排列或省略表格欄位。 您可以自訂一個格式檔案,以適應其欄位未直接對應到資料表欄位的資料檔案。 如需詳細資訊,請參閱下列文章: