Utilizzo di un file di formato per escludere un campo di dati

È possibile che un file di dati contenga un numero di campi maggiore del numero di colonne presenti nella tabella. In questo argomento viene descritta la modifica dei file di formato XML e non XML per consentire l'utilizzo di un file di dati con un numero maggiore di campi tramite il mapping delle colonne della tabella ai campi dati corrispondenti e l'esclusione dei campi aggiuntivi.

[!NOTA]

È possibile utilizzare un file di formato non XML o XML per eseguire un'importazione bulk di un file di dati nella tabella tramite un comando bcp, l'istruzione BULK INSERT o l'istruzione INSERT ... SELECT * FROM OPENROWSET(BULK...). Per ulteriori informazioni, vedere Utilizzo di un file di formato per l'importazione bulk dei dati.

File di dati e tabella di esempio

Gli esempi di file di formato modificati utilizzati in questo argomento sono basati sulla tabella e sui file di dati seguenti.

Tabella di esempio

Per gli esempi, è necessario che nel database di esempio AdventureWorks venga creata una tabella myTestSkipField basata sullo schema dbo. Per creare la tabella, nell'editor di query di MicrosoftSQL Server Management Studio eseguire il codice seguente:

USE AdventureWorks;
GO
CREATE TABLE myTestSkipField 
   (
   PersonID smallint,
   FirstName nvarchar(50) ,
   LastName nvarchar(50) 
   )
GO

File di dati di esempio

Il file di dati myTestSkipField-c.dat include i record seguenti:

1,Skipme,DataField3,DataField4
1,Skipme,DataField3,DataField4
1,Skipme,DataField3,DataField4

Per eseguire un'importazione bulk dei dati da myTestSkipField-c.dat nella tabella myTestSkipField, è necessario che il file di formato esegua le operazioni seguenti:

  • Mapping del primo campo dati alla prima colonna PersonID.

  • Esclusione del secondo campo dati.

  • Mapping del terzo campo dati alla seconda colonna FirstName.

  • Mapping del quarto campo dati alla terza colonna LastName.

File di formato non XML per un maggior numero di campi dati

Il file di formato seguente, myTestSkipField.fmt, esegue il mapping dei campi di myTestSkipField-c.dat alle colonne della tabella myTestSkipField e utilizza il formato di dati carattere. Per escludere il mapping di una colonna, è necessario modificare il valore relativo all'ordine della colonna impostandolo su 0, come illustrato per la colonna ExtraField nel file di formato.

Il file di formato myTestSkipField.fmt contiene le informazioni seguenti:

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

[!NOTA]

Per informazioni sulla sintassi dei file di formato non XML, vedere Informazioni sui file di formato non XML.

Esempi

Nell'esempio seguente viene utilizzata l'istruzione INSERT ... SELECT * FROM OPENROWSET(BULK...) con il file di formato myTestSkipField.fmt. Nell'esempio viene eseguita l'importazione bulk del file di dati myTestSkipField-c.dat nella tabella myTestSkipField. Per creare il file di dati e la tabella di esempio, vedere la sezione "File di dati e tabella di esempio" più indietro in questo argomento.

Nell'editor di query di SQL Server Management Studio eseguire il codice seguente:

USE AdventureWorks;
GO
INSERT INTO myTestSkipField 
   SELECT *
      FROM  OPENROWSET(BULK  'C:\myTestSkipField-c.dat',
      FORMATFILE='C:\myTestSkipField.fmt'  
       ) AS t1;
GO 

File di formato XML per un maggior numero di campi dati

Il file di formato utilizzato in questo esempio è basato su un altro file di formato, myTestSkipField.xml, che utilizza il formato di dati carattere e i cui campi corrispondono esattamente per numero e ordine alle colonne della tabella myTestSkipField. Per visualizzare il contenuto di questo file di formato, vedere Creazione di un file di formato.

Il file di formato seguente, myTestSkipField.xml, esegue il mapping dei campi di myTestSkipField-c.dat alle colonne della tabella myTestSkipField e utilizza il formato di dati carattere.

Il file di formato myTestSkipField.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="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>

Esempi

Nell'esempio seguente viene utilizzata l'istruzione INSERT ... SELECT * FROM OPENROWSET(BULK...) con il file di formato myTestSkipField.Xml. Nell'esempio viene eseguita l'importazione bulk del file di dati myTestSkipField-c.dat nella tabella myTestSkipField. Per creare il file di dati e la tabella di esempio, vedere la sezione "File di dati e tabella di esempio" più indietro in questo argomento.

Nell'editor di query di SQL Server Management Studio eseguire il codice seguente:

USE AdventureWorks;
GO
INSERT INTO myTestSkipField 
  SELECT *
      FROM  OPENROWSET(BULK  'C:\myTestSkipField-c.dat',
      FORMATFILE='C:\myTestSkipField.xml'  
       ) AS t1;
GO 

[!NOTA]

Per informazioni sulla sintassi dello schema XML e per esempi aggiuntivi di file di formato XML, vedere Informazioni sui file di formato XML.