資料檔中包含的欄位順序可以與資料表中對應資料行的順序不同。 本主題同時呈現已修改的非 XML 和 XML 格式檔案,以容納其欄位排列順序與資料表資料行不同的資料檔。 已修改的格式檔案可將資料欄位對應到與它們對應的資料表資料行。
備註
非 XML 格式檔案或 XML 格式檔案皆可用於透過 bcp 命令、BULK INSERT 語句或 INSERT ... SELECT * FROM OPENROWSET(BULK...) 語句將資料檔大容量導入資料表。 如需詳細資訊,請參閱使用格式檔案大量匯入資料 (SQL Server)。
範例數據表和數據檔
本主題中修改格式檔案的範例是以下表和數據檔為基礎。
範例數據表
本主題中的範例要求在 AdventureWorks2012 範例資料庫的 dbo 結構下建立一個名為 myTestOrder 的資料表。 若要建立此數據表,請在 SQL Server Management Studio 查詢編輯器中執行下列程式代碼:
USE AdventureWorks2012;
GO
CREATE TABLE myTestOrder
(
Col1 smallint,
Col2 nvarchar(50) ,
Col3 nvarchar(50) ,
Col4 nvarchar(50)
);
GO
數據檔
資料檔案 myTestOrder-c.txt包含下列記錄:
DataField3,DataField2,1,DataField4
DataField3,DataField2,1,DataField4
DataField3,DataField2,1,DataField4
若要將資料從myTestSkipCol2-c.datmyTestSkipCol大容量匯入資料表,格式檔案必須將第一個資料欄位對應至 Col3、第二個資料欄位對應至 、第三個資料欄位對應至 Col2Col1,並將第四個資料欄位對應至 Col4。
使用非 XML 格式檔案
您可以變更欄的順序值,以指示對應資料欄位的位置,從而調整列映射的順序。
下列範例非 XML 格式檔案展示格式檔案 myTestOrder.fmt,將 myTestOrder-c.txt 中的欄位對應至 myTestOrder 表的欄位。 如需有關建立資料檔案和資料表的資訊,請參閱本主題中前面所述的「範例表格和資料檔案」。 格式檔案使用字元數據格式。
格式檔案包含下列資訊:
9.0
4
1 SQLCHAR 0 100 "," 3 Col3 SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 0 100 "," 2 Col2 SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 7 "," 1 Col1 ""
4 SQLCHAR 0 100 "\r\n" 4 Col4 SQL_Latin1_General_CP1_CI_AS
備註
如需非 XML 格式檔案配置的詳細資訊,請參閱非 XML 格式檔案(SQL Server)。
範例
下列範例會使用 BULK INSERT 語句,使用myTestOrder.fmt非 XML 格式檔案,將數據從myTestOrder-c.txt數據檔大容量導入myTestOrder範例數據表。
在 SQL Server Management Studio 查詢編輯器中,執行:
USE AdventureWorks2012;
GO
BULK INSERT myTestOrder
FROM 'C:\myTestOrder-c.txt'
WITH (formatfile='C:\myTestOrder.fmt');
GO
使用 XML 格式檔案
下列範例非 XML 格式檔案呈現格式檔案中的 myTestOrder.xml,會將myTestOrder-c.txt 欄位對應至 myTestOrder 資料表的欄位。如需有關如何建立資料檔和資料表的詳細資訊,請參閱本主題前面的「範例資料表和資料檔案」。
格式 myTestOrder.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="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<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="7"/>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="3" NAME="Col1" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="2" NAME="Col2" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="1" NAME="Col3" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="4" NAME="Col4" xsi:type="SQLNVARCHAR"/>
</ROW>
</BCPFORMAT>
備註
如需 XML 架構語法和其他 XML 格式檔案範例的相關信息,請參閱 XML 格式檔案 (SQL Server) 。
範例
下列範例會使用OPENROWSET大容量數據列集提供者,使用 myTestOrder.xml XML 格式檔案將數據從myTestOrder-c.txt數據文件匯入myTestOrder範例數據表。
INSERT... SELECT語句會指定選取清單中的欄位清單。
在 SQL Server Management Studio 查詢編輯器中,執行下列程式代碼:
USE AdventureWorks2012;
GO
INSERT INTO myTestOrder
SELECT Col1, Col2, Col3, Col4
FROM OPENROWSET(BULK 'C:\myTestOrder-c.txt',
FORMATFILE='C:\myTestOrder.Xml'
) AS t1;
GO