匯入或匯出資料的格式檔案 (SQL Server)
當您將資料大量匯入 SQL Server 資料表,或從資料表大量匯出資料時,可以使用「格式檔案」(Format File) 來儲存大量匯出或大量匯入資料所需的所有格式資訊。 這包含相對於該資料表之資料檔中各欄位的格式資訊。
SQL Server 2012 支援兩種類型的格式檔案:XML 格式檔案和非 XML 格式檔案。 非 XML 格式檔案和 XML 格式檔案都會將每個欄位的描述包含在資料檔中,而且 XML 格式檔案也包含對應資料表資料行的描述。 一般而言,XML 和非 XML 格式檔案可以互換使用, 但是仍建議您在新的格式檔案中使用 XML 語法,因為 XML 比非 XML 格式檔案多了一些優點。 如需詳細資訊,請參閱<XML 格式檔案 (SQL Server)>。
本主題內容:
格式檔案的優點
格式檔案的範例
何時需要格式檔案?
相關工作
格式檔案的優點
提供可用來寫入資料檔的彈性系統,幾乎不需要進行編輯,即可符合其他資料格式或從其他軟體中讀取資料檔。
可讓您大量匯入資料,而不需要加入或刪除不需要的資料,或是重新排列資料檔中的現有資料。 當資料檔欄位與資料表資料行不相符時,格式檔案就會特別有用。
格式檔案的範例
下列範例顯示非 XML 格式檔案及 XML 格式檔案的配置。 這些格式檔案會對應到 AdventureWorks2012 範例資料庫中的 HumanResources.myTeam 資料表。 這個資料表包含四個資料行:EmployeeID、Name、Title 和 ModifiedDate。
[!附註]
如需有關如何建立此資料表及此資料表的詳細資訊,請參閱<HumanResources.myTeam 範例資料表 (SQL Server)>。
A.使用非 XML 格式檔案
下列非 XML 格式檔案使用 HumanResources.myTeam 資料表的 SQL Server 原生資料格式。 這個格式檔案是使用下列 bcp 命令所建立。
bcp AdventureWorks.HumanResources.myTeam format nul -f myTeam.Fmt -n -T
The contents of this format file are as follows: 9.0
4
1 SQLSMALLINT 0 2 "" 1 EmployeeID ""
2 SQLNCHAR 2 100 "" 2 Name SQL_Latin1_General_CP1_CI_AS
3 SQLNCHAR 2 100 "" 3 Title SQL_Latin1_General_CP1_CI_AS
4 SQLNCHAR 2 100 "" 4 Background SQL_Latin1_General_CP1_CI_AS
如需詳細資訊,請參閱<非 XML 格式檔案 (SQL Server)>。
[回到頁首]
B.使用 XML 格式檔案
下列 XML 格式檔案使用 HumanResources.myTeam 資料表的 SQL Server 原生資料格式。 這個格式檔案是使用下列 bcp 命令所建立。
bcp AdventureWorks.HumanResources.myTeam format nul -f myTeam.Xml -x -n -T
格式檔案包含:
<?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" LENGTH="1"/>
<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="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="EmployeeID" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="2" NAME="Name" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="3" NAME="Title" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="4" NAME="Background" xsi:type="SQLNVARCHAR"/>
</ROW>
</BCPFORMAT>
如需詳細資訊,請參閱<XML 格式檔案 (SQL Server)>。
[回到頁首]
何時需要格式檔案?
INSERT ... SELECT * FROM OPENROWSET(BULK...) 陳述式永遠需要格式檔案。
- 至於 bcp 或 BULK INSERT,在簡單的情況下,可以選擇是否使用格式檔案,但很少會需要。 不過,在複雜的大量匯入情況下,就經常需要格式檔案。
下列情況需要格式檔案:
多個具有不同結構描述的資料表,使用同一個資料檔做為來源。
資料檔的欄位數目和目標資料表的資料行數目不同;例如:
目標資料表至少有一個資料行,其中定義了預設值或允許 NULL。
使用者在資料表中的一或多個資料行上沒有 SELECT/INSERT 權限。
兩個以上具有不同結構描述的資料表,使用單一資料檔。
資料檔與資料表的資料行順序不同。
資料檔的資料行之間,有不同的終止字元或前置長度。
[!附註]
在沒有格式檔案的情況下,如果 bcp 命令指定資料格式參數 (-n、-c、-w 或 -N),或 BULK INSERT 作業指定 DATAFILETYPE 選項,則會採用指定的資料格式來做為解譯資料檔欄位的預設方法。
[回到頁首]
相關工作
[回到頁首]