SQL Server 2014 提供 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) 。
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> 元素。 這些元素對應到資料檔案中的欄位。 基本語法如下:
<記錄>
<FIELD .../> [ ...n ]
</記錄>
每個 <FIELD> 元素都會描述特定數據欄位的內容。 一個欄位只能對應到資料表的一個資料行。 並非所有欄位都需要對應到資料行。
資料檔中的欄位可以是固定/可變長度或以字元終止。 域值可以表示為:字元(使用單一位元組表示)、寬字元(使用 Unicode 雙位元組表示)、原生資料庫格式或檔名。 如果欄位值是以檔案名稱表示,則檔案名稱指向包含目標資料表中 BLOB 資料行的值的檔案。
<ROW> 描述如何將檔案中的數據匯入 SQL Server 數據表時,從數據檔建構數據列。
<ROW> 元素包含一組 <COLUMN> 元素。 這些元素對應到資料表資料行。 基本語法如下:
<排>
<COLUMN .../> [ ...n ]
</行>
每個 <COLUMN> 元素只能對應至數據檔中的一個字段。 <ROW> 元素中 <COLUMN> 元素的順序會定義大量作業傳回它們的順序。 XML 格式檔案會將每個 <COLUMN> 元素指派一個與批次匯入作業目標表格欄位沒有關聯性的區域名稱。
XML 格式檔案的架構語法
本節包含 XML 格式檔案之 XML 結構描述的元素和屬性摘要。 格式檔案的語法與作業方向無關;也就是說,不管是大量匯出還是大量匯入作業,語法都相同。 本節也會考慮批量匯入時如何使用<ROW>和<COLUMN>元素,以及如何將元素的xsi:type值放入資料集中。
若要查看語法如何對應到實際的 XML 格式檔案,請參閱本主題稍後的 範例 XML 格式檔案。
備註
您可以修改格式檔案,讓您從欄位數目及/或順序與資料表資料行數目及/或順序不同的資料檔案,進行大量匯入。 如需詳細資訊,請參閱匯入或匯出資料的格式檔案 (SQL Server)。
XML 架構的基本語法
此語法語句只會顯示元素 (<BCPFORMAT>、RECORD>、<<FIELD>、<ROW> 和 <COLUMN>) 及其基本屬性。
<BCPFORMAT ...>
<記錄>
<FIELD ID = “fieldID” xsi:type = “fieldType” [...]
/>
</記錄>
<排>
<COLUMN SOURCE = “fieldID” NAME = “columnName” xsi:type = “columnType” [...]
/>
</排>
</BCPFORMAT>
備註
本主題稍後會說明與 FIELD> 或 <COLUMN> 元素中 <xsi:type 值相關聯的其他屬性。
模式元素
本節摘要說明 XML 結構描述為 XML 格式檔案定義之每個元素的目的。 本主題稍後的各節會說明屬性。
<BCPFORMAT>
這是格式檔案元素,用於定義某個數據檔案的記錄結構,以及它在資料表中與資料列的欄位對應關係。
<記錄。。。/>
定義包含一或多個 <FIELD> 元素的複雜元素。 格式檔案中欄位的宣告順序是欄位出現在資料檔中的順序。
<田。。。/>
定義資料檔中包含資料的欄位。
本主題稍後的 Attributes of the <FIELD> Element中會討論此元素的屬性。
<資料列……/>
定義包含一或多個 <COLUMN> 元素的複雜元素。 COLUMN 元素的順序<與 RECORD 定義中的 FIELD> 元素順序<>無關。 相反地,格式檔案中 COLUMN> 元素的順序<會決定結果數據列集的數據行順序。 數據欄位載入的順序,是依據在 <COLUMN> 元素中宣告的對應 <COLUMN> 元素的順序。
如需詳細資訊,請參閱本主題稍後部分的 大容量匯入如何使用 <ROW> 元素。
<列>
將欄位定義為元素(<COLUMN>)。 每個 <COLUMN> 元素都會對應至 <FIELD> 元素(其識別元是在 COLUMN> 元素的 <SOURCE 屬性中指定)。
在本主題稍後的內容中,將在<COLUMN> 元素的屬性中討論此元素的屬性。 另請參閱本主題稍後部分,了解大容量導入使用<COLUMN>元素的方法。
</BCPFORMAT>
結束格式檔案時需要用到。
FIELD> 元素的屬性<
本節描述 <FIELD> 元素的屬性,其摘要如下列架構語法所示:
<欄位
ID =“fieldID”
xsi**:**type =“fieldType”
[ LENGTH =“n” ]
[ PREFIX_LENGTH =“p” ]
[ MAX_LENGTH =“m” ]
[ COLLATION =“collationName” ]
[ TERMINATOR =“terminator” ]
/>
每個 <FIELD 元素都與其他項目> 無關。 欄位的描述是基於以下屬性:
| 欄位屬性 | 說明 | 選擇性 / 為必填項目 |
|---|---|---|
ID =“fieldID” |
指定資料檔中欄位的邏輯名稱。 欄位識別碼是用來參考該欄位的索引鍵。 <欄位標識碼**=“” fieldID/> 對應至 <COLUMN SOURCE=“fieldID”**/> |
為必填項目 |
xsi:type =“fieldType” |
這是一種 XML 結構,用於識別元素實例的類型,類似於屬性。 fieldType 的值會決定指定實例中您需要的選擇性屬性(下方)。 | 必要 (視資料類型而定) |
LENGTH =“n” |
此屬性定義固定長度資料類型實例的長度。 n 的值必須為正整數。 |
除非 xsi:type 值需要,否則為選擇性 |
PREFIX_LENGTH =“p” |
此屬性定義二進位資料代表的前置長度。 PREFIX_LENGTH值 p 必須是下列其中一項:1、2、4 或 8。 | 除非 xsi:type 值需要,否則為選擇性 |
MAX_LENGTH =“m” |
此屬性是可儲存在給定欄位中的最大位元組數。 如果沒有目標數據表,則不知道數據行最大長度。 MAX_LENGTH 屬性會限制輸出字元數據行的最大長度,限制為數據行值配置的記憶體。 在 SELECT FROM 子句中使用 OPENROWSET 函式的 BULK 選項時,這特別方便。 m 的值必須為正整數。 根據預設, char 數據行的最大長度為8000個字元, nchar 數據行的最大長度為4000個字元。 |
可選 |
COLLATION =「collationName」 |
COLLATION 只適用於字符欄位。 如需 SQL 定序名稱的清單,請參閱 SQL Server 定序名稱 (Transact-SQL)。 | 可選 |
TERMINATOR = “terminator” |
此屬性會指定資料欄位的結束字元。 結束字元可以是任何字元。 終止符必須是不屬於數據的唯一字元。 根據預設,欄位結束符是製表符(以 \t 表示)。 若要表示段落標記,請使用 \r\n。 |
僅適用於需要此屬性的 xsi:type 字元數據 |
<FIELD> 元素的 Xsi:type 值
xsi:type 值是 XML 建構(例如屬性),可識別元素實例的數據類型。 如需使用<將 xsi:type Value 放入數據集>的詳細資訊,請參閱本節稍後。
FIELD> 元素的 <xsi:type 值支援下列數據類型。
| <FIELD> xsi:type 值 | 必要的 XML 屬性 for 數據類型 |
選擇性的 XML 屬性(s) 資料類型 |
|---|---|---|
| NativeFixed | LENGTH |
沒有。 |
| NativePrefix | PREFIX_LENGTH |
最大長度 (MAX_LENGTH) |
| CharFixed | LENGTH |
編排 |
| NCharFixed | LENGTH |
編排 |
| CharPrefix | PREFIX_LENGTH |
最大長度,定序 |
| NCharPrefix | PREFIX_LENGTH |
MAX_LENGTH,排序規則 |
| CharTerm | TERMINATOR |
MAX_LENGTH,排序規則 |
| NCharTerm | TERMINATOR |
MAX_LENGTH,定序 |
如需有關 Microsoft SQL Server 資料類型的詳細資訊,請參閱 資料類型 (Transact-SQL)。
COLUMN> 元素的屬性<
本節描述 <COLUMN> 元素的屬性,總結於以下的架構語法中:
<列
SOURCE = “fieldID”
NAME = “columnName”
xsi:type = “columnType”
[ LENGTH = “n” ]
[ PRECISION = “n” ]
[ SCALE = 「value」 ]
[ NULLABLE = { 「是」
“NO” } ]
/>
欄位會透過下列屬性映射到目標資料表的資料行:
| 欄位屬性 | 說明 | 選擇性 / 為必填項目 |
|---|---|---|
SOURCE =“fieldID” |
指定對應到資料行的欄位識別碼。 <COLUMN SOURCE**=" fieldID/> 映射到 <FIELD ID="fieldID"**/> |
為必填項目 |
| NAME = “columnName” | 指定資料列集合中由格式檔代表的資料行名稱。 此資料行名稱會用來識別結果集中的資料行,而且它不需要對應到用於目標資料表中的資料行名稱。 | 為必填項目 |
xsi**:**type =“ColumnType” |
這是用來識別元素實例資料類型的 XML 結構(像屬性一樣使用)。
ColumnType 的值會決定指定實例中您需要的選擇性屬性(下方)。 注意: ColumnType 及其相關屬性的可能值列在下一個表格中。 |
可選 |
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 完全無關。 不過,如果欄位不是 NULLABLE,且欄位指定 NULL(未指定任何值),則執行時會發生錯誤。 只有在您執行一般 SELECT FROM OPENROWSET(BULK...) 語句時,才會使用 NULLABLE 屬性。 |
選用 (可用於任何資料類型) |
COLUMN> 元素的 <Xsi:type 值
xsi:type 值是 XML 建構(例如屬性),可識別元素實例的數據類型。 如需使用<將 xsi:type Value 放入數據集>的詳細資訊,請參閱本節稍後。
<COLUMN> 元素支援原生 SQL 資料類型,如下所示:
| 類型類別 | <COLUMN> 數據類型 | 必要的 XML 屬性 資料類型 |
選擇性的 XML 屬性(s) 數據類型 |
|---|---|---|---|
| 已修正 |
SQLBIT、SQLTINYINT、SQLSMALLINT、SQLINT、SQLBIGINT、SQLFLT4、SQLFLT8、SQLDATETIME、SQLDATETIM4、SQLDATETIM8、SQLMONEY、SQLMONEY4、SQLVARIANT和 SQLUNIQUEID |
沒有。 | 可為空 |
| 變數號碼 |
SQLDECIMAL 和 SQLNUMERIC |
沒有。 | 可設為 NULL、精度、刻度 |
| LOB |
SQLIMAGE、CharLOB、SQLTEXT和 SQLUDT |
沒有。 | 可為空 |
| 字元LOB | SQLNTEXT |
沒有。 | 可為空 |
| 二進位字串 |
SQLBINARY 和 SQLVARYBIN |
沒有。 | 可為 NULL,長度 |
| 字串 |
SQLCHAR、SQLVARYCHAR、SQLNCHAR和 SQLNVARCHAR |
沒有。 | 可為空值,長度 |
這很重要
若要大容量匯出或匯入 SQLXML 數據,請在您的格式檔案中使用下列其中一種數據類型:SQLCHAR 或 SQLVARYCHAR(數據是在用戶端代碼頁或定序所隱含的代碼頁中傳送)、SQLNCHAR 或 SQLNVARCHAR(數據會以 Unicode 形式傳送),或 SQLBINARY 或 SQLVARYBIN(數據會傳送而不進行任何轉換)。
如需 SQL Server 數據類型的詳細資訊,請參閱數據類型(Transact-SQL)。
<大容量導入如何使用 ROW 元素>
<某些內容中會忽略 ROW> 元素。 <ROW> 元素是否會影響大容量導入作業,取決於作業的執行方式:
bcp 命令
將數據載入目標數據表時, bcp 會 <忽略 ROW> 元件。 相反地, bcp 會根據目標資料表的資料行類型來載入資料。
Transact-SQL 陳述句 (BULK INSERT 和 OPENROWSET 的批量資料列集提供者)
將數據大容量導入數據表時,Transact-SQL 語句會使用 <ROW> 元件來產生輸入數據列集。 此外,Transact-SQL 語句會根據 ROW> 下<指定的數據行類型和目標數據表中對應的數據行,執行適當的類型轉換。 若格式檔案中指定的資料行類型與目標資料表不同,會發生額外的類型轉換。 相較於 bcp,這種額外的類型轉換可能會導致 BULK INSERT 或 OPENROWSET 的 Bulk 數據列集提供者行為不一致(也就是精確度遺失)。
ROW> 元素中的<資訊可讓數據列建構,而不需要任何其他資訊。 因此,您可以使用 SELECT 語句產生數據列集(SELECT * FROM OPENROWSET(BULK datafile FORMATFILE=xmlformatfile)。
備註
OPENROWSET BULK 子句需要格式檔案(請注意,從欄位的資料類型轉換為資料行的資料類型僅在 XML 格式檔案中可用)。
批量匯入如何使用 <COLUMN> 元素
若要將資料大容量導入資料表, <格式檔案中的 COLUMN> 元素會藉由指定下列方式,將資料檔欄位對應至資料表資料行:
資料檔的資料列中每一個欄位的位置。
資料行類型,用來將欄位資料類型轉換成所要的資料行資料類型。
如果沒有數據行對應至欄位,則欄位不會複製到產生的數據列。。 此行為可讓資料檔產生具有不同資料行的資料列 (在不同的資料表中)。
同樣地,若要從數據表大容量匯出數據, <格式檔案中的每個 COLUMN> 都會將輸入資料表數據列的數據行對應至輸出資料檔中的對應欄位。
將 xsi:type Value 放入數據集
透過 XML 架構定義 (XSD) 語言驗證 XML 檔時,不會將 xsi:type 值放入資料集中。 不過,您可以透過將 XML 格式檔案載入 XML 文件來將 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> 則表示換行字元。
備註
如需如何建立格式檔案的相關資訊,請參閱建立格式檔案 (SQL Server)。
A。 排序字元數據欄位以對應表格的欄位順序
下列範例顯示 XML 格式檔案,其中描述包含三個字元資料欄位的資料檔。 格式檔案將資料檔對應到包含三個資料行的資料表。 資料欄位與表格的欄位一一對應。
表格(列): 人員 (年齡 int, FirstName varchar(20), LastName varchar(30))
數據檔(記錄):年齡<索引標籤>[名字] 索引標籤>Lastname<<傳回>
下列 XML 格式檔案會將資料檔中的資料讀入資料表。
在 <RECORD> 元素中,格式檔案是以字元資料來表示這三個欄位內的資料值。 每一個欄位的 TERMINATOR 屬性,都會指出跟在資料值後面的結束字元。
資料欄位與表格的欄位一一對應。 在 <ROW> 元素中,格式檔案會將資料行 Age 對應到第一個欄位、資料行 FirstName 對應到第二個欄位,以及資料行 LastName 對應到第三個欄位。
<?xml version="1.0"?>
<BCPFORMAT
xmlns="https://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>
備註
如需對等 的 AdventureWorks2012 範例,請參閱 建立格式檔案 (SQL Server) 。
B. 以不同的方式排序數據欄位和數據表數據行
下列範例顯示 XML 格式檔案,其中描述包含三個字元資料欄位的資料檔。 格式檔案會將資料檔對應到包含三個資料行 (排序方式與資料檔的欄位不同) 的資料表。
表(列): 人(年齡 INT,FirstName VARCHAR(20),LastName VARCHAR(30))
數據文件(記錄):年齡<索引標籤> Lastname 索引標籤>Firstname<<傳回>
在 <RECORD> 元素中,格式檔案是以字元資料來表示這三個欄位內的資料值。
在 <ROW> 元素中,格式檔案會將資料行 Age 對應到第一個欄位、資料行 FirstName 對應到第三個欄位,以及資料行 LastName 對應到第二個欄位。
<?xml version="1.0"?>
<BCPFORMAT
xmlns="https://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>
備註
如需對等 的 AdventureWorks2012 範例,請參閱 使用格式檔案將數據表數據行對應至 Data-File 字段 (SQL Server) 。
C. 省略數據欄位
下列範例顯示 XML 格式檔案,其中描述包含四個字元資料欄位的資料檔。 格式檔案將資料檔對應到包含三個資料行的資料表。 第二個數據欄位不會對應至任何數據表數據行。
表格(列): 人員 (年齡 int, FirstName Varchar(20), LastName Varchar(30))
數據檔(記錄):年齡<索引標籤 employeeID<索引>>標籤>名字索引標籤 Lastname<<傳回>
在 <RECORD> 元素中,格式檔案是以字元資料來表示這四個欄位內的資料值。 對於每個欄位,TERMINATOR 屬性會指出數據值後面的終止符。
在 <ROW> 元素中,格式檔案會將資料行 Age 對應到第一個欄位、資料行 FirstName 對應到第三個欄位,以及資料行 LastName 對應到第四個欄位。
<BCPFORMAT
xmlns="https://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>
備註
如需對等 AdventureWorks2012 的範例,請參見 使用格式檔案略過資料欄位(SQL Server)。
D. 將 <FIELD> xsi:type 對應至 <COLUMN> xsi:type
下列範例顯示不同類型的欄位,以及它們與資料行的對應關係。
<?xml version = "1.0"?>
<BCPFORMAT
xmlns="https://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="https://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="https://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 格式檔案的其他範例,請參閱下列主題:
相關工作
相關內容
沒有。
另請參閱
大容量導入和導出資料 (SQL Server)
資料類型 (Transact-SQL)
非 XML 格式檔案 (SQL Server)
匯入或匯出資料的格式檔案 (SQL Server)