Utilizzo di un file di formato per eseguire il mapping tra le colonne della tabella e i campi del file di dati (SQL Server)
Un file di dati può includere campi disposti in un ordine diverso da quello delle colonne corrispondenti presenti nella tabella. In questo argomento vengono descritti file di formato sia non XML che XML, modificati per adattarli a un file di dati contenente campi disposti un ordine diverso da quello delle colonne della tabella. Il file di formato modificato esegue il mapping tra i campi dati e le colonne corrispondenti della tabella.
Nota
È possibile usare un file di formato non XML o un file di formato XML per importare in blocco un file di dati nella tabella usando un comando bcp , un'istruzione BULK INSERT o INSERT ... ISTRUZIONE SELECT * FROM OPENROWSET(BULK...) . Per altre informazioni, vedere Usare un file di formato per l'importazione in blocco dei dati (SQL Server).
Tabella e file di dati di esempio
Gli esempi di file di formato modificati contenuti in questo argomento sono basati sulla tabella e sul file di dati seguenti.
Tabella di esempio
Gli esempi in questo argomento richiedono la creazione di una tabella denominata myTestOrder
nel database di esempio AdventureWorks2012 nello dbo
schema. Per creare questa tabella, in SQL Server Management Studio Editor di query, eseguire il codice seguente:
USE AdventureWorks2012;
GO
CREATE TABLE myTestOrder
(
Col1 smallint,
Col2 nvarchar(50) ,
Col3 nvarchar(50) ,
Col4 nvarchar(50)
);
GO
File di dati
Il file di dati myTestOrder-c.txt
include i record seguenti:
DataField3,DataField2,1,DataField4
DataField3,DataField2,1,DataField4
DataField3,DataField2,1,DataField4
Per eseguire l'importazione bulk dei dati da myTestSkipCol2-c.dat
alla tabella myTestSkipCol
, il file di formato deve eseguire il mapping tra il primo campo dati e Col3
, il secondo campo dati e Col2
, il terzo campo dati e Col1
e il quarto campo dati e Col4
.
Utilizzo di un file di formato non XML
È possibile cambiare l'ordine del mapping di una colonna modificando il valore relativo all'ordine della colonna per indicare la posizione del campo dati corrispondente.
Nel seguente file di formato non XML di esempio è illustrato un file di formato, myTestOrder.fmt
, che esegue il mapping tra i campi in myTestOrder-c.txt
e le colonne della tabella myTestOrder
. Per informazioni su come creare la tabella e il file di dati, vedere "Tabella e file di dati di esempio", più indietro in questo argomento. Il file di formato utilizza dati di tipo carattere.
Il file di formato contiene le informazioni seguenti:
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
Nota
Per altre informazioni sul layout dei file di formato non XML, vedere File di formato non XML (SQL Server).
Esempio
Nell'esempio seguente viene utilizzata un'istruzione BULK INSERT
per l'importazione bulk dei dati dal file di dati myTestOrder-c.txt
alla tabella di esempio myTestOrder
tramite il file di formato non XML myTestOrder.fmt
.
Nell'SQL Server Management Studio Editor di query eseguire:
USE AdventureWorks2012;
GO
BULK INSERT myTestOrder
FROM 'C:\myTestOrder-c.txt'
WITH (formatfile='C:\myTestOrder.fmt');
GO
Utilizzo di un file di formato XML
Nel seguente file di formato non XML di esempio è illustrato un file di formato, myTestOrder.xml
, che esegue il mapping tra i campi in myTestOrder-c.txt
e le colonne della tabella myTestOrder
. Per informazioni su come creare la tabella e il file di dati, vedere "Tabella e file di dati di esempio", più indietro in questo argomento.
Il file di formato myTestOrder.xml
contiene le informazioni seguenti:
<?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>
Nota
Per informazioni sulla sintassi di XML Schema e altri esempi di file di formato XML, vedere File di formato XML (SQL Server).
Esempio
Nell'esempio seguente viene utilizzato il provider di set di righe con lettura bulk OPENROWSET
per l'importazione bulk dei dati dal file di dati myTestOrder-c.txt
alla tabella di esempio myTestOrder
tramite il file di formato XML myTestOrder.xml
. L'istruzione INSERT... SELECT
specifica l'elenco di colonne nell'elenco di selezione.
Nella SQL Server Management Studio Editor di query eseguire il codice seguente:
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
Vedere anche
Utilizzo di un file di formato per ignorare una colonna di una tabella (SQL Server)
Usare un file di formato per escludere un campo dati (SQL Server)