使用格式檔案略過資料欄位 (SQL Server)
資料檔所包含的欄位,可以比資料表中的資料行數多。 此主題描述如何將資料表資料行對應到相對的資料欄位並忽略多餘欄位,藉以修改非 XML 格式檔案與 XML 格式檔案,讓資料檔能容納更多欄位。
注意
非 XML 或 XML 格式檔案可用來使用 bcp 命令、BULK INSERT 語句或 INSERT ... 將資料檔案大量匯入資料表中。SELECT * FROM OPENROWSET (BULK...) 語句。 如需詳細資訊,請參閱使用格式檔案大量匯入資料 (SQL Server)。
範例資料檔與資料表
此主題中的修改格式檔案的範例是以下列資料表與資料檔為基礎。
範例資料表
這些範例要求在架構下的 AdventureWorks2012 範例資料庫中建立名為 myTestSkipField
的 dbo
資料表。 若要建立此資料表,請在 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)