資料檔所包含的欄位,可以比資料表中的資料行數多。 此主題描述如何將資料表資料行對應到相對的資料欄位並忽略多餘欄位,藉以修改非 XML 格式檔案與 XML 格式檔案,讓資料檔能容納更多欄位。
備註
非 XML 或 XML 格式檔案均可透過 bcp 命令、BULK INSERT 語句,或透過 INSERT ... SELECT * FROM OPENROWSET(BULK...) 語句將資料檔案大容量導入資料表。 如需詳細資訊,請參閱使用格式檔案大量匯入資料 (SQL Server)。
範例數據檔和數據表
本主題中修改格式檔案的範例是以下表和數據檔為基礎。
範例數據表
這些範例需要在 AdventureWorks2012 範例資料庫的 dbo 架構下建立名為 myTestSkipField 的數據表。 若要建立此數據表,請在 Microsoft SQL Server Management Studio 查詢編輯器中執行下列程序代碼:
USE AdventureWorks2012;
GO
CREATE TABLE myTestSkipField
(
PersonID smallint,
FirstName nvarchar(50) ,
LastName nvarchar(50)
);
GO
範例數據檔
資料檔案 myTestSkipField-c.dat包含下列記錄:
1,Skipme,DataField3,DataField4
1,Skipme,DataField3,DataField4
1,Skipme,DataField3,DataField4
若要從 myTestSkipField-c.dat 大量匯入資料到 myTestSkipField 資料表中,格式檔案必須執行下列工作:
將第一個資料欄位對應到第一個資料行
PersonID。略過第二個資料欄位。
將第三個資料欄位對應到第二個資料行
FirstName。將第四個資料欄位對應到第三個資料行
LastName。
適用於更多數據欄位的非 XML 格式檔案
下列格式檔案 myTestSkipField.fmt 會將 myTestSkipField-c.dat 欄位對應至 myTestSkipField 表格的列。 格式檔案使用字元數據格式。 略過欄位映射需要將其欄位順序值變更為 0,如格式檔案中的 ExtraField 欄位所示。
格式 myTestSkipField.fmt 檔案包含下列資訊:
9.0
4
1 SQLCHAR 0 7 "," 1 PersonID ""
2 SQLCHAR 0 100 "," 0 ExtraField SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 100 "," 2 FirstName SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 100 "\r\n" 3 LastName SQL_Latin1_General_CP1_CI_AS
備註
如需非 XML 格式檔案語法的相關信息,請參閱 非 XML 格式檔案 (SQL Server) 。
範例
下列範例使用 INSERT ... SELECT * FROM OPENROWSET(BULK...) 並使用 myTestSkipField.fmt 格式檔案。 此範例會將 myTestSkipField-c.dat 資料檔案大量匯入 myTestSkipField 資料表。 若要建立範例數據表和數據檔,請參閱本主題稍早的。
在 SQL Server Management Studio 查詢編輯器中,執行下列程式代碼:
USE AdventureWorks2012;
GO
INSERT INTO myTestSkipField
SELECT *
FROM OPENROWSET(BULK 'C:\myTestSkipField-c.dat',
FORMATFILE='C:\myTestSkipField.fmt'
) AS t1;
GO
更多數據欄位的 XML 格式檔案
此範例中呈現的格式檔案是以另一個格式檔案 myTestSkipField.xml 為基礎,該檔案在整個過程中使用字元數據格式,其欄位的數量和順序完全對應於表格 myTestSkipField 的列。 若要檢視該格式檔案的內容,請參閱 建立格式檔案 (SQL Server) 。
以下格式檔案myTestSkipField.xml會將myTestSkipField-c.dat中的欄位對應到myTestSkipField資料表的欄位。 格式檔案使用字元數據格式。
格式 myTestSkipField.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="7"/>
<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="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="PersonID" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="3" NAME="FirstName" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="4" NAME="LastName" xsi:type="SQLNVARCHAR"/>
</ROW>
</BCPFORMAT>
範例
下列範例使用 INSERT ... SELECT * FROM OPENROWSET(BULK...) 並採用 myTestSkipField.Xml 格式檔案。 此範例會將 myTestSkipField-c.dat 資料檔案大量匯入 myTestSkipField 資料表。 若要建立範例數據表和數據檔,請參閱本主題稍早的。
在 SQL Server Management Studio 查詢編輯器中,執行下列程式代碼:
USE AdventureWorks2012;
GO
INSERT INTO myTestSkipField
SELECT *
FROM OPENROWSET(BULK 'C:\myTestSkipField-c.dat',
FORMATFILE='C:\myTestSkipField.xml'
) AS t1;
GO
備註
如需 XML 架構語法和其他 XML 格式檔案範例的相關信息,請參閱 XML 格式檔案 (SQL Server) 。
另請參閱
bcp 公用程式
BULK INSERT(Transact-SQL)
OPENROWSET (Transact-SQL)
使用格式檔案以略過資料表資料行 (SQL Server)
使用格式文件將資料表欄位對應至資料檔案欄位 (SQL Server)