Condividi tramite


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)