共用方式為


XML 格式檔案 (SQL Server)

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

SQL Server 提供 XML 結構描述,其定義可撰寫 XML 格式檔案的語法,以用於將資料大量匯入 SQL Server 資料表。 XML 格式檔案必須遵守以 XML 結構描述定義語言 (XSDL) 定義的這個結構描述。 只有在同時安裝 SQL Server 工具和 SQL Server Native Client 時,才能支援 XML 格式檔案。

您可以使用 XML 格式檔案搭配 bcp 命令、BULK INSERT 語句或 INSERT ... SELECT * FROM OPENROWSET(BULK...) 語句。 bcp 命令可讓您自動產生資料表的 XML 格式檔案;如需詳細資訊,請參閱 bcp 公用程式

有兩種類型的格式檔案支援大量匯出和匯入:「非 XML 格式檔案」和「XML 格式檔案」。 相較於非 XML 格式檔案而言,XML 格式檔案是較彈性且功能強大的替代方案。 如需非 XML 格式檔案的詳細資訊,請參閱 使用非 XML 格式檔案 (SQL Server)

注意

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

XML 格式檔案的優點

XML 格式檔案具有自我描述能力,使其易於讀取、建立和擴充。 它們是人類可讀的,可讓您輕鬆瞭解在大量作業期間如何解譯數據。

XML 格式檔案包含目標資料行的資料類型。 XML 編碼清楚描述資料檔的資料類型和資料元素,以及資料元素和資料表資料行之間的對應關係。

如此可將資料檔呈現資料的方式,與檔案中每一個欄位和資料類型間的關係,予以區隔開來。 例如,資料檔若包含資料的字元表示法,就會遺失對應的 SQL 資料行類型。

XML 格式檔案允許從資料檔載入包含單一大型物件 (LOB) 資料類型的欄位。

XML 格式檔案雖然功能增強,但仍保持與其舊版的相容性。 此外,XML 清楚的編碼方式,有利於建立所指定的資料檔的多個格式檔案。 如果您需要將資料欄位的全部或部分對應到不同資料表或檢視表中的資料行,這會很有用。

XML 語法與作業方向無關;也就是說,大量匯出和大量匯入作業的語法相同。

您可以使用 XML 格式檔案,大量匯入資料至資料表或非資料分割檢視中及大量匯出資料。

OPENROWSET(BULK...) 函式的指定目標數據表是可選的。 原因是函數依賴 XML 格式檔案,才能從資料檔讀取資料。

注意

目標數據表必須使用 bcp 命令和 BULK INSERT 語句,它會使用目標數據表數據行來執行類型轉換。

XML 格式檔案的結構

就像非 XML 格式檔案一樣,XML 格式檔案也定義資料檔中資料欄位的格式和結構,並將那些資料欄位對應到單一目標資料表中的資料行。

XML 格式檔案擁有兩個主要元件,<RECORD><ROW>

  • <RECORD> 描述資料儲存在資料文件中。

    每個 <RECORD> 專案都包含一組或多個 <FIELD> 專案。 這些元素對應到資料檔案中的欄位。 基本語法如下:

    <RECORD>
        <FIELD .../> [ ...n ]
    </RECORD>
    

    每個 <FIELD> 項目都會描述特定數據欄位的內容。 一個欄位只能對應到資料表的一個資料行。 並非所有欄位都需要對應到資料行。

    資料檔中的欄位可以是固定/可變長度或以字元終止。 域值 可以表示為:字元(使用單一位元組表示法)、寬字元(使用 Unicode 2 位元組表示法)、原生資料庫格式或檔名。 如果欄位值是以檔案名稱表示,則檔案名稱指向包含目標資料表中 BLOB 資料行的值的檔案。

  • <ROW> 描述如何將檔案中的數據匯入 SQL Server 數據表時,從數據檔建構數據列。

    <ROW> 元素包含一組 <COLUMN> 元素。 這些元素對應到資料表資料行。 基本語法如下:

    <ROW>
        <COLUMN .../> [ ...n ]
    </ROW>
    

    每個 <COLUMN> 元素只能對應到數據檔中的一個字段。 在 <ROW> 元素中,<COLUMN> 元素的順序會決定大量作業傳回它們的順序。 XML 格式檔案會為每個 <COLUMN> 元素指派一個本機名稱,該名稱與大容量匯入作業目標資料表中的欄無關。

XML 格式檔案的結構描述語法

本節包含 XML 格式檔案之 XML 結構描述的元素和屬性摘要。 格式檔案的語法與作業方向無關;也就是說,不管是大量匯出還是大量匯入作業,語法都相同。 本節也會考慮大量匯入如何使用 <ROW><COLUMN> 元素,以及如何將元素的 xsi:type 值放入數據集中。

若要了解語法如何對應到實際的 XML 格式檔案,請參閱範例 XML 格式檔案

注意

您可以修改格式檔案,讓您從欄位數目及/或順序與資料表資料行數目及/或順序不同的資料檔案,進行大量匯入。 如需詳細資訊,請參閱 格式檔案以匯入或匯出資料 (SQL Server)

XML 結構描述的基本語法

這些語法語句只會顯示元素(<BCPFORMAT><RECORD><FIELD><ROW><COLUMN>)及其基本屬性。

注意

本文稍後會說明與 <FIELD><COLUMN> 元素中 xsi:type 值相關聯的其他屬性。

模式元素

本節摘要說明 XML 結構描述為 XML 格式檔案定義之每個元素的目的。 本文章稍後的各節會說明屬性。

  • <BCPFORMAT>

    format-file 元素定義了特定數據檔的記錄結構,並確定其與表格中行列的對應關係。

  • <RECORD .../>

    定義包含一或多個 <FIELD> 元素的複雜元素。 格式檔案中欄位的宣告順序是欄位出現在資料檔中的順序。

  • <FIELD .../>

    定義資料檔中包含資料的欄位。 本文稍後將在 屬性中討論 <FIELD> 元素的屬性。

  • <ROW .../>

    定義包含一個或多個 <COLUMN> 元素的複合元素。 <COLUMN> 項目的順序與 RECORD 定義中 <FIELD> 元素的順序無關。 相反地,格式檔案中 <COLUMN> 項目的順序會決定結果數據列集的數據行順序。 資料欄位會按照在 <COLUMN> 元素中宣告的對應 <COLUMN> 元素的順序載入。 如需更多資訊,請參閱本文稍後的 批量匯入如何使用 <ROW> 元素

  • <COLUMN>

    將資料行定義為元素(<COLUMN>)。 每個 <COLUMN> 元素都對應到一個 <FIELD> 元素(其 ID 是在 <COLUMN> 元素的 SOURCE 屬性中指定的)。 本文稍後將在<COLUMN> Element的屬性中討論這個元素的屬性。 另請參閱本文稍後的 大量導入如何使用 <COLUMN> 元素

  • </BCPFORMAT>

    結束格式檔案時需要用到。

<FIELD> 元素的屬性

本節描述 <FIELD> 元素的屬性,其摘要說明下列架構語法:

<FIELD
ID ="fieldID"
xsi:type ="fieldType"
[ LENGTH ="n" ]
[ PREFIX_LENGTH ="p" ]
[ MAX_LENGTH ="m" ]
[ COLLATION ="collationName" ]
[ TERMINATOR ="terminator" ]
/>

每個 <FIELD> 元素都是彼此獨立的。 欄位的描述是基於以下屬性:

欄位屬性 描述 選擇性 /
必要
ID=“fieldID 指定資料檔中欄位的邏輯名稱。 欄位識別碼是用來參考該欄位的索引鍵。

<FIELD ID=“fieldID” /> 對應至 <COLUMN SOURCE=“fieldID” />
必要
xsi:type=“fieldType 這是一種 XML 結構,用於識別元素實例的類型,類似於屬性。 fieldType 的值會決定您在指定實例中所需的 選擇性屬性 必要 (視資料類型而定)
LENGTH=“n 此屬性定義固定長度資料類型實例的長度。

n 的值必須為正整數。
除非 xsi:type 值需要,否則為選擇性
PREFIX_LENGTH=“p 此屬性定義二進位資料代表的前置長度。 PREFIX_LENGTHp 必須是下列其中一個值:1248 除非 xsi:type 值需要,否則為選擇性
MAX_LENGTH=“m 此屬性是可儲存在給定欄位中的最大位元組數。 如果沒有目標數據表,則不知道數據行最大長度。 MAX_LENGTH 屬性會限制輸出字元數據行的最大長度,限制為數據行值配置的記憶體。 在 SELECT FROM 子句中使用 OPENROWSET 函式的 BULK 選項時,這特別方便。

m 的值必須為正整數。 根據預設,char 數據行的最大長度為 8,000 個字元,nchar 數據行則為 4,000 個字元。
選用
COLLATION=「collationName COLLATION 僅允許用於字元欄位。 如需 SQL Server 定序名稱的清單,請參閱 SQL Server 定序名稱 選用
TERMINATOR=“終止符 此屬性會指定資料欄位的結束字元。 結束字元可以是任何字元。 終止符必須是不屬於數據的唯一字元。

根據預設,欄位終止符號是定位字元(以 \t表示)。 若要表示段落標記,請使用 \r\n
這個屬性只能與字元數據的 xsi:type 搭配使用,這需要這個屬性。

  • xsi:type <FIELD> 元素的值

    xsi:type 值是 XML 建構(例如屬性),可識別項目實例的數據類型。 如需詳細資訊,請參閱本文中的 將 xsi:type 值放入數據集 一節。

    <FIELD> 項目的 xsi:type 值支援下列數據類型。

    <FIELD> xsi:type 必要的 XML 屬性
    數據類型
    選擇性 XML 屬性
    數據類型
    NativeFixed LENGTH 無。
    NativePrefix PREFIX_LENGTH MAX_LENGTH
    CharFixed LENGTH COLLATION
    NCharFixed LENGTH COLLATION
    CharPrefix PREFIX_LENGTH MAX_LENGTHCOLLATION
    NCharPrefix PREFIX_LENGTH MAX_LENGTHCOLLATION
    CharTerm TERMINATOR MAX_LENGTHCOLLATION
    NCharTerm TERMINATOR MAX_LENGTHCOLLATION

    如需 SQL Server 資料類型的詳細資訊,請參閱 資料類型

  • <COLUMN> 元素的屬性

    本節描述 <COLUMN> 元素的屬性,其摘要說明下列架構語法:

    <COLUMN
    SOURCE = "fieldID"
    NAME = "columnName"
    xsi:type = "columnType"
    [ LENGTH = "n" ]
    [ PRECISION = "n" ]
    [ SCALE = "value" ]
    [ NULLABLE = { "YES" | "NO" } ]
    />
    

    欄位會透過下列屬性映射到目標資料表的資料行:

    COLUMN 屬性 描述 選擇性 /
    必要
    SOURCE=“fieldID 指定對應到資料行的欄位識別碼。

    <COLUMN SOURCE=fieldID「/> 會對應至 <FIELD ID=fieldID」/>
    必要
    NAME=“columnName 指定資料列集合中由格式檔代表的資料行名稱。 此資料行名稱會用來識別結果集中的資料行,而且它不需要對應到用於目標資料表中的資料行名稱。 必要
    xsi:type=“ColumnType 這是用來識別元素實例資料類型的 XML 結構(像屬性一樣使用)。 ColumnType 的值會決定您在指定實例中所需的 選擇性屬性

    注意:ColumnType 及其相關屬性的可能值列在 xsi:type 值的 <COLUMN> 元素 區段的 <COLUMN> 元素表中。
    選用
    LENGTH=“n 定義固定長度資料類型实例的長度。 只有當 xsi:type 是字串數據類型時,才會使用 LENGTH

    n 的值必須為正整數。
    選擇性 (只有在 xsi:type 是字串資料類型時才可使用)
    PRECISION=“n 指定數字中的位數。 例如,數字 123.45 的精確度是 5。

    其值必須為正整數。
    選擇性 (只有在 xsi:type 是可變數位資料類型時才可使用)
    SCALE=「int 指定數字中小數點右方的位數。 例如,數字 123.45 的小數位數是 2。

    值必須是整數。
    選擇性 (只有在 xsi:type 是可變數位資料類型時才可使用)
    NULLABLE={ “YES” |“NO” } 可指出一個欄位是否能夠接受 NULL 的值。 此屬性與 FIELDS無關。 不過,如果欄位不可為 Null,而且未指定值時欄位指定了 NULL,則會導致運行時錯誤。

    只有當您執行純 SELECT FROM OPENROWSET(BULK...) 語句時,才會使用 NULLABLE 屬性。
    選用 (可用於任何資料類型)

  • xsi:type <COLUMN> 元素的值

    xsi:type 值是 XML 建構(例如屬性),可識別項目實例的數據類型。 如需使用<將 值放入數據集>的詳細資訊,請參閱本節稍後。

    <COLUMN> 項目支援原生 SQL 資料類型,如下所示:

    類型類別 <COLUMN> 數據類型 必要的 XML 屬性
    數據類型
    選擇性 XML 屬性
    數據類型
    固定 SQLBITSQLTINYINTSQLSMALLINTSQLINTSQLBIGINTSQLFLT4SQLFLT8SQLDATETIMESQLDATETIM4SQLDATETIM8SQLMONEYSQLMONEY4SQLVARIANTSQLUNIQUEID 無。 NULLABLE
    變數編號 SQLDECIMALSQLNUMERIC 無。 NULLABLEPRECISIONSCALE
    變數日期和時間 SQLDATETIME2SQLTIMESQLDATETIMEOFFSET 無。 NULLABLESCALE
    LOB SQLIMAGECharLOBSQLTEXTSQLUDT 無。 NULLABLE
    字元 LOB SQLNTEXT 無。 NULLABLE
    二進位字串 SQLBINARYSQLVARYBIN 無。 NULLABLELENGTH
    字元字串 SQLCHARSQLVARYCHARSQLNCHARSQLNVARCHAR 無。 NULLABLELENGTH

    重要

    若要大容量匯出或匯入 SQLXML 數據,請在您的格式檔案中使用下列其中一種數據類型:SQLCHARSQLVARYCHAR(數據是在用戶端代碼頁或定序所隱含的代碼頁中傳送)、SQLNCHARSQLNVARCHAR(數據以 Unicode 傳送),或 SQLBINARYSQLVARYBIN(數據未經轉換傳送)。

    如需 SQL Server 資料類型的詳細資訊,請參閱 資料類型

大量匯入如何使用 <ROW> 元素

某些情境中會忽略 <ROW> 元素。 <ROW> 元素是否會影響批量匯入作業取決於該作業的執行方式:

  • bcp 命令

    將數據載入目標數據表時,bcp 會忽略 <ROW> 元件。 相反地, bcp 會根據目標資料表的資料行類型來載入資料。

  • Transact-SQL 陳述 (BULK INSERTOPENROWSET的批量行集提供者)

    將數據大容量導入數據表時,Transact-SQL 語句會使用 <ROW> 元件來產生輸入數據列集。 此外,Transact-SQL 語句會根據 <ROW> 下指定的數據行類型和目標數據表中對應的數據行,執行適當的類型轉換。 若格式檔案中指定的資料行類型與目標資料表不同,會發生額外的類型轉換。 在與 bcp相比時,這種額外的類型轉換可能會導致 BULK INSERTOPENROWSET的大量數據列集提供者的行為出現某些差異(即精確度損失)。

    <ROW> 元素中的資訊可讓數據列建構,而不需要任何其他資訊。 基於這個理由,您可以使用 SELECT 語句產生數據列集 (SELECT * FROM OPENROWSET(BULK <data-file> FORMATFILE=<xml-format-file>)。

    OPENROWSET BULK 子句需要格式檔案。 從欄位的數據類型轉換成資料行的數據類型僅適用於 XML 格式檔案。

大量匯入如何使用 <COLUMN> 元素

若要將資料大容量導入資料表,格式檔案中的 <COLUMN> 元素會藉由指定下列專案,將數據檔欄位對應至資料表資料行:

  • 資料檔的資料列中每一個欄位的位置。

  • 資料行類型,用來將欄位資料類型轉換成所要的資料行資料類型。

如果沒有數據行對應至欄位,欄位就不會複製到產生的數據列。 此行為可讓資料檔產生具有不同資料行的資料列 (在不同的資料表中)。

同樣地,若要從數據表大容量匯出數據,格式檔案中的每個 <COLUMN> 會將輸入數據表數據列的數據行對應至輸出數據檔中的對應欄位。

xsi:type 值放入數據集

透過 XML 架構定義 (XSD) 語言驗證 XML 檔時,不會將 xsi:type 值放入資料集中。 不過,您可以將 XML 格式檔案載入 XML 檔(例如,myDoc),以將 xsi:type 資訊放入數據集,如下列代碼段所示:

...;
myDoc.LoadXml(xmlFormat);
XmlNodeList ColumnList = myDoc.GetElementsByTagName("COLUMN");
for (int i = 0; i < ColumnList.Count; i++)
{
    Console.Write($"COLUMN: xsi:type={ColumnList[i].Attributes["type",
        "http://www.w3.org/2001/XMLSchema-instance"].Value}\n");
}

範例 XML 格式檔案

本節包含各種情況下使用 XML 格式檔案的資訊,包括 Adventure Works 範例。

注意

在下列範例顯示的資料檔中,<tab> 表示資料檔中的 Tab 字元,<return> 則表示換行字元。

這些範例說明使用 XML 格式檔案的重要部分,如下所示:

如需如何建立格式檔案的相關資訊,請參閱建立格式檔案 (SQL Server)

A. 以與資料表資料行相同的方式排序字元資料欄位

下列範例顯示 XML 格式檔案,其中描述包含三個字元資料欄位的資料檔。 格式檔案將資料檔對應到包含三個資料行的資料表。 資料欄位與表格的欄位一一對應。

  • 數據表(數據列):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • 數據檔(記錄):Age<tab>FirstName<tab>LastName<return>

下列 XML 格式檔案會將資料檔中的資料讀入資料表。

<RECORD> 元素中,格式檔案是以字元資料來表示這三個欄位內的資料值。 每一個欄位的 TERMINATOR 屬性,都會指出跟在資料值後面的結束字元。

資料欄位與資料表的欄是一對一對應的。 在 <ROW> 元素中,格式檔案會將資料行 Age 對應到第一個欄位、資料行 FirstName 對應到第二個欄位,以及資料行 LastName 對應到第三個欄位。

<?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="\t"
            MAX_LENGTH="12" />
        <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="20" COLLATION="SQL_Latin1_General_CP1_CI_AS" />
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n"
            MAX_LENGTH="30"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT" />
        <COLUMN SOURCE="2" NAME="firstname" xsi:type="SQLVARYCHAR" />
        <COLUMN SOURCE="3" NAME="lastname" xsi:type="SQLVARYCHAR" />
    </ROW>
</BCPFORMAT>

注意

如需參考相等的 AdventureWorks2022 範例,請參閱建立格式檔案 (SQL Server)

B. 以不同的方式排序資料欄位與資料表資料行

下列範例顯示 XML 格式檔案,其中描述包含三個字元資料欄位的資料檔。 格式檔案會將資料檔對應到包含三個資料行 (排序方式與資料檔的欄位不同) 的資料表。

  • 數據表(數據列):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • 數據檔(記錄):Age<tab>FirstName<tab>LastName<return>

<RECORD> 元素中,格式檔案是以字元資料來表示這三個欄位內的資料值。

<ROW> 元素中,格式檔案會將資料行 Age 對應到第一個欄位、資料行 FirstName 對應到第三個欄位,以及資料行 LastName 對應到第二個欄位。

<?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="\t"
            MAX_LENGTH="12" />
        <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="20"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n"
            MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT" />
        <COLUMN SOURCE="3" NAME="firstname" xsi:type="SQLVARYCHAR" />
        <COLUMN SOURCE="2" NAME="lastname" xsi:type="SQLVARYCHAR" />
    </ROW>
</BCPFORMAT>

注意

如需參考相等的 AdventureWorks2022 範例,請參閱使用格式檔案將資料表資料行對應至資料檔案欄位 (SQL Server)

C. 省略資料欄位

下列範例顯示 XML 格式檔案,其中描述包含四個字元資料欄位的資料檔。 格式檔案將資料檔對應到包含三個資料行的資料表。 第二個數據欄位不會對應至任何數據表數據行。

  • 數據表(數據列):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • 數據檔(記錄):Age<tab>FirstName<tab>LastName<return>

<RECORD> 元素中,格式檔案是以字元資料來表示這四個欄位內的資料值。 每一個欄位的 TERMINATOR 屬性,都會指出跟在資料值後面的結束字元。

<ROW> 元素中,格式檔案會將資料行 Age 對應到第一個欄位、資料行 FirstName 對應到第三個欄位,以及資料行 LastName 對應到第四個欄位。

<?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="\t"
            MAX_LENGTH="12" />
        <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="10"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="20"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
        <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n"
            MAX_LENGTH="30"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT" />
        <COLUMN SOURCE="3" NAME="firstname" xsi:type="SQLVARYCHAR" />
        <COLUMN SOURCE="4" NAME="lastname" xsi:type="SQLVARYCHAR" />
    </ROW>
</BCPFORMAT>

注意

如需參考相等的 AdventureWorks2022 範例,請參閱使用格式檔案略過資料欄位 (SQL Server)

D. 將 <FIELD> xsi:type 對應至 <COLUMN> xsi:type

下列範例顯示不同類型的欄位,以及它們與資料行的對應關係。

<?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 xsi:type="CharTerm" ID="C1" TERMINATOR="\t"
            MAX_LENGTH="4" />
        <FIELD xsi:type="CharFixed" ID="C2" LENGTH="10"
            COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
        <FIELD xsi:type="CharPrefix" ID="C3" PREFIX_LENGTH="2"
            MAX_LENGTH="32" COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
        <FIELD xsi:type="NCharTerm" ID="C4" TERMINATOR="\t"
            MAX_LENGTH="4" />
        <FIELD xsi:type="NCharFixed" ID="C5" LENGTH="10"
            COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
        <FIELD xsi:type="NCharPrefix" ID="C6" PREFIX_LENGTH="2"
            MAX_LENGTH="32" COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
        <FIELD xsi:type="NativeFixed" ID="C7" LENGTH="4" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="C1" NAME="Age" xsi:type="SQLTINYINT" />
        <COLUMN SOURCE="C2" NAME="FirstName" xsi:type="SQLVARYCHAR"
            LENGTH="16" NULLABLE="NO" />
        <COLUMN SOURCE="C3" NAME="LastName" />
        <COLUMN SOURCE="C4" NAME="Salary" xsi:type="SQLMONEY" />
        <COLUMN SOURCE="C5" NAME="Picture" xsi:type="SQLIMAGE" />
        <COLUMN SOURCE="C6" NAME="Bio" xsi:type="SQLTEXT" />
        <COLUMN SOURCE="C7" NAME="Interest" xsi:type="SQLDECIMAL"
            PRECISION="5" SCALE="3" />
    </ROW>
</BCPFORMAT>

E. 將 XML 資料對應到資料表

下列範例建立包含兩個資料行的空資料表 (t_xml),其中第一個資料行對應到 int 資料類型,而第二個資料行則對應到 xml 資料類型。

CREATE TABLE t_xml (c1 INT, c2 XML);

下列 XML 格式檔案將會在資料表 t_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="NativePrefix" PREFIX_LENGTH="1" />
        <FIELD ID="2" xsi:type="NCharPrefix" PREFIX_LENGTH="8" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="c1" xsi:type="SQLINT" />
        <COLUMN SOURCE="2" NAME="c2" xsi:type="SQLNCHAR" />
    </ROW>
</BCPFORMAT>

F. 匯入固定長度或固定寬度的欄位

下列範例描述各有 10 個或 6 個字元的固定欄位。 格式檔案分別以 LENGTH="10"LENGTH="6"來表示這些欄位長度/寬度。 數據檔案的每一列都以歸位字元和換行字元的組合<CR><LF>結尾,格式文件將其表示為TERMINATOR="\r\n"

<?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="CharFixed" LENGTH="10" />
        <FIELD ID="2" xsi:type="CharFixed" LENGTH="6" />
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="C1" xsi:type="SQLINT" />
        <COLUMN SOURCE="2" NAME="C2" xsi:type="SQLINT" />
    </ROW>
</BCPFORMAT>

其他範例

如需非 XML 格式檔案和 XML 格式檔案的更多範例,請參閱下列文章: