範例 XML 格式檔案
此主題中的範例,說明使用 XML 格式檔案的重要觀念。格式檔案的語法與作業方向無關;也就是說,不管是大量匯出還是大量匯入作業,語法都相同。
這些範例說明下列情況:
以與資料表資料行相同的方式排序字元資料欄位
以不同的方式排序資料欄位與資料表資料行
省略資料欄位
將不同類型的欄位對應到資料行
將 XML 資料對應到資料表
匯入固定長度或固定寬度的欄位
[!附註]
如需有關如何建立格式檔案的詳細資訊,請參閱<建立格式檔案>。
範例
在下列範例顯示的資料檔中,<tab> 表示資料檔中的定位字元,而 <return> 則表示歸位字元。
A. 以與資料表資料行相同的方式排序字元資料欄位
下列範例顯示 XML 格式檔案,其中描述包含三個字元資料欄位的資料檔。格式檔案將資料檔對應到包含三個資料行的資料表。資料欄位是以一對一的方式,來對應資料表的資料行。
Table (row): Person (Age int, FirstName varchar(20), LastName varchar(30))
Data file (record): Age<tab>Firstname<tab>Lastname<return>
下列 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>
[!附註]
如需參考相等的 AdventureWorks 範例,請參閱<建立格式檔案>。
B. 以不同的方式排序資料欄位與資料表資料行
下列範例顯示 XML 格式檔案,其中描述包含三個字元資料欄位的資料檔。格式檔案會將資料檔對應到包含三個資料行 (排序方式與資料檔的欄位不同) 的資料表。
Table (row): Person (Age int, FirstName varchar(20), LastName varchar(30))
Data file (record): Age<tab>Lastname<tab>Firstname<return>
在 <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>
[!附註]
如需參考相等的 AdventureWorks 範例,請參閱<使用格式檔案將資料表資料行對應到資料檔欄位>。
C. 省略資料欄位
下列範例顯示 XML 格式檔案,其中描述包含四個字元資料欄位的資料檔。格式檔案將資料檔對應到包含三個資料行的資料表。第二個資料欄位不對應到任何資料表資料行。
Table (row): Person (Age int, FirstName Varchar(20), LastName Varchar(30))
Data file (record): Age<tab>employeeID<tab>Firstname<tab>Lastname<return>
在 <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="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>
[!附註]
如需參考相等的 AdventureWorks 範例,請參閱<使用格式檔案以略過資料欄位>。
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>