Utilizzo di un file di formato per ignorare una colonna di una tabella (SQL Server)Use a Format File to Skip a Table Column (SQL Server)

In questo argomento vengono illustrati i file di formato.This topic describes format files. È possibile utilizzare un file di formato per evitare di importare la colonna di una tabella quando il campo non esiste nel file di dati.You can use a format file to skip importing a table column when the field does not exist in the data file. Un file di dati può contenere un numero di campi inferiore rispetto al numero di colonne della tabella solo se le colonne ignorate ammettono valori Null e/o hanno un valore predefinito.A data file can contain fewer fields than the number of columns in the table only if the skipped columns are nullable and/or have default value.

Tabella e file di dati di esempioSample Table and Data File

Per gli esempi seguenti è necessaria una tabella denominata myTestSkipCol nel database di esempio AdventureWorks2012AdventureWorks2012 nello schema dbo .The following examples require a table named myTestSkipCol in the AdventureWorks2012AdventureWorks2012 sample database under the dbo schema. Per creare la tabella, utilizzare il codice seguente:Create this table as follows:

USE AdventureWorks2012;  
GO  
CREATE TABLE myTestSkipCol   
   (  
   Col1 smallint,  
   Col2 nvarchar(50) NULL,  
   Col3 nvarchar(50) not NULL  
   );  
GO  

Negli esempi seguenti viene utilizzato un file di dati di esempio, myTestSkipCol2.dat, che contiene solo due campi, mentre la tabella corrispondente contiene tre colonne:The following examples use a sample data file, myTestSkipCol2.dat, which contains only two fields, although the corresponding table contains three columns:

1,DataForColumn3  
1,DataForColumn3  
1,DataForColumn3  

Per eseguire l'importazione bulk dei dati da myTestSkipCol2.dat nella tabella myTestSkipCol , è necessario che il file di formato esegua il mapping tra il primo campo di dati e Col1e tra il secondo campo e Col3, ignorando Col2.To bulk import data from myTestSkipCol2.dat into the myTestSkipCol table, the format file must map the first data field to Col1, the second field to Col3, skipping Col2.

Utilizzo di un file di formato non XMLUsing a Non-XML Format File

È possibile modificare un file di formato non XML per ignorare una colonna di tabella.You can modify a non-XML format file to skip a table column. In genere, questo richiede l'uso dell'utilità bcp per creare un file di formato non XML predefinito e per modificare il file predefinito in un editor di testo.Typically, this involves using the bcp utility to create a default non-XML format file and the modifying the default file in a text editor. Il file di formato modificato deve eseguire il mapping tra ogni campo esistente e la colonna di tabella corrispondente e indicare quale colonna o quali colonne di tabella ignorare.The modified format file must map each existing fields to its corresponding table column and indicate which table column or columns to skip. Esistono due alternative per la modifica di un file di dati non XML predefinito.Two alternatives exist for modifying a default non-XML data file. Entrambi consentono di indicare che il campo dati non esiste nel file di dati e che nella colonna della tabella corrispondente non verrà inserito alcun dato.Either alternative indicates that the data field does not exist in the data file and that no data will be inserted into the corresponding table column.

Creazione di un file di formato non XML predefinitoCreating a Default Non-XML Format File

Questo argomento usa il file di formato non XML predefinito creato per la tabella di esempio myTestSkipCol usando il comando bcp seguente:This topic uses the default non-XML format file that was created for the myTestSkipCol sample table by using the following bcp command:

bcp AdventureWorks2012..myTestSkipCol format nul -f myTestSkipCol_Default.fmt -c -T  

Il comando precedente crea un file di formato non XML, myTestSkipCol_Default.fmt.The previous command creates a non-XML format file, myTestSkipCol_Default.fmt. Questo file di formato è chiamato file di formato predefinito perché è generato da bcp.This format file is called a default format file because it is the form generated by bcp. In genere, un file di formato predefinito descrive una corrispondenza uno-a-uno tra i campi del file di dati e le colonne di tabella.Typically, a default format file describes a one-to-one correspondence between data-file fields and table columns.

Importante

Potrebbe essere necessario specificare il nome dell'istanza del server al quale ci si connette.You might have to specify the name of the server instance to which you are connecting. Potrebbe inoltre essere necessario specificare il nome utente e la password.Also, you might have to specify the user name and password. Per altre informazioni, vedere bcp Utility.For more information, see bcp Utility.

Nella figura seguente vengono illustrati i valori nei file di formato predefinito di esempio.The following illustration shows the values in this sample default format files. Nella figura viene inoltre indicato il nome di ogni campo del file di formato.The illustration also shows the name of each format-file field.

file di formato non XML predefinito per myTestSkipColdefault non-XML format file for myTestSkipCol

Nota

Per altre informazioni sui campi dei file di formato, vedere File in formato non XML (SQL Server).For more information about the format-file fields, see Non-XML Format Files (SQL Server).

Modalità di modifica di un file di formato non XMLMethods for Modifying a Non-XML Format File

Per ignorare una colonna di tabella, modificare il file di formato non XML predefinito, utilizzando una delle modalità alternative seguenti:To skip a table column, edit the default non-XML format file and modify the file by using one of the following alternative methods:

  • La modalità preferita include tre passaggi principali.The preferred method involves three basic steps. Eliminare innanzitutto eventuali righe del file di formato che specifichino un campo non presente nel file di dati.First, delete any format-file row that describes a field that is missing from the data file. Ridurre quindi il valore "Ordine dei campi nel file host" di ogni riga del file di formato che segue una riga eliminata.Then, reduce the "Host file field order" value of each format-file row that follows a deleted row. L'obiettivo sono i valori sequenziali "Ordine dei campi nel file host", da 1 a n, che riflettono l'effettiva posizione di ogni campo nel file di dati.The goal is sequential "Host file field order" values, 1 through n, that reflect the actual position of each data field in the data file. Ridurre infine il valore nel campo "Numero di colonne" in modo da riflettere il numero effettivo di campi nel file di dati.Finally, reduce the value in the "Number of columns" field to reflect the actual number of fields in the data file.

    L'esempio seguente si basa sul file di formato predefinito per la tabella myTestSkipCol , creato in "Creazione di un file di formato non XML predefinito", più indietro in questo argomento.The following example is based on the default format file for the myTestSkipCol table, which is created in "Creating a Default Non-XML Format File," earlier in this topic. Questo file di formato modificato esegue il mapping tra il primo campo dati e Col1, ignora Col2ed esegue il mapping tra il secondo campo dati e Col3.This modified format file maps the first data field to Col1, skips Col2, and maps the second data field to Col3. La riga per Col2 è stata eliminata.The row for Col2 has been deleted.

    9.0  
    2  
    1       SQLCHAR       0       7       "\t"     1     Col1         ""  
    2       SQLCHAR       0       100     "\r\n"   3     Col3         SQL_Latin1_General_CP1_CI_AS  
    
  • In alternativa, per ignorare una colonna di tabella, è possibile modificare la definizione della riga del file di formato che corrisponde alla colonna di tabella.Alternatively, to skip a table column, you can modify the definition of the format-file row that corresponds to the table column. In questa riga del file di formato, i valori "lunghezza del prefisso," "lunghezza dei dati del file host" e "ordine delle colonne nel server" devono essere impostati su 0.In this format-file row, the "prefix length," "host file data length," and "server column order" values must be set to 0. Inoltre, i campi "terminatore" e "regole di confronto a livello di colonna" devono essere impostati su "" (NULL).Also, the "terminator" and "column collation" fields must be set to "" (NULL).

    Il valore "nome della colonna del server" richiede una stringa non vuota, sebbene il nome di colonna effettivo non sia necessario.The "server column name" value requires a nonblank string, though the actual column name is not necessary. Per i campi di formato restanti sono necessari i relativi valori predefiniti.The remaining format fields require their default values.

    L'esempio seguente deriva inoltre dal file di formato predefinito per la tabella myTestSkipCol .The following example is also derived from the default format file for the myTestSkipCol table.

    9.0  
    3  
    1       SQLCHAR       0       7       "\t"     1     Col1         ""  
    2       SQLCHAR       0       0       ""       0     Col2         ""  
    3       SQLCHAR       0       100     "\r\n"   3     Col3         SQL_Latin1_General_CP1_CI_AS  
    

EsempiExamples

Gli esempi seguenti sono inoltre basati sulla tabella di esempio myTestSkipCol e sul file di dati di esempio myTestSkipCol2.dat creati in "File di dati e tabella di esempio", più indietro in questo argomento.The following examples are also based on the myTestSkipCol sample table and the myTestSkipCol2.dat sample data file that are created in "Sample Table and Data File," earlier in this topic.

Utilizzo di BULK INSERTUsing BULK INSERT

Il funzionamento di questo esempio si basa sull'utilizzo dei file di formato non XML modificati creati in "Modalità di modifica di un file di formato non XML", più indietro in questo argomento.This example works by using either of the modified non-XML format files created in "Methods for Modifying a Non-XML Format File," earlier in this topic. In questo esempio, il file di formato modificato è denominato C:\myTestSkipCol2.fmt.In this example, the modified format file is named C:\myTestSkipCol2.fmt. Per utilizzare BULK INSERT per l'importazione bulk dei file di dati myTestSkipCol2.dat , nell'editor di query di SQL Server Management StudioSQL Server Management Studio eseguire il codice seguente:To use BULK INSERT to bulk import the myTestSkipCol2.dat data file, in the SQL Server Management StudioSQL Server Management Studio Query Editor, execute the following code:

USE AdventureWorks2012;  
GO  
BULK INSERT myTestSkipCol   
   FROM 'C:\myTestSkipCol2.dat'   
   WITH (FORMATFILE = 'C:\myTestSkipCol2.fmt');  
GO  
SELECT * FROM myTestSkipCol;  
GO  

Utilizzo di un file di formato XMLUsing an XML Format File

Con un file di formato XML non è possibile ignorare una colonna quando si sta eseguendo l'importazione diretta in una tabella usando un comando bcp o un'istruzione BULK INSERT.With an XML format file, you cannot skip a column when you are importing directly into a table by using a bcp command or a BULK INSERT statement. È tuttavia possibile importare un'intera tabella a eccezione dell'ultima colonna.However, you can import into all but the last column of a table. Se si desidera ignorare una colonna diversa dall'ultima, è necessario creare una vista della tabella di destinazione che contiene solo le colonne contenute nel file di dati.If you have to skip any but the last column, you must create a view of the target table that contains only the columns contained in the data file. In seguito sarà possibile eseguire un'importazione bulk dei dati da tale file nella vista.Then, you can bulk import data from that file into the view.

Per utilizzare un file di formato XML per ignorare una colonna di una tabella tramite OPENROWSET(BULK...), è necessario specificare un elenco esplicito di colonne nell'elenco selezionato e nella tabella di destinazione, come indicato di seguito:To use an XML format file to skip a table column by using OPENROWSET(BULK...), you have to provide explicit list of columns in the select list and also in the target table, as follows:

INSERT ...<column_list> SELECT <column_list> FROM OPENROWSET(BULK...)INSERT ...<column_list> SELECT <column_list> FROM OPENROWSET(BULK...)

Creazione di un file di formato XML predefinitoCreating a Default XML Format File

Gli esempi dei file di formato modificati sono basati sulla tabella di esempio myTestSkipCol e sul file di dati di esempio creati in "File di dati e tabella di esempio", più indietro in questo argomento.The examples of modified format files are based on the myTestSkipCol sample table and data file that are created in "Sample Table and Data File," earlier in this topic. Il comando bcp seguente crea un file di formato XML predefinito per la tabella myTestSkipCol :The following bcp command creates a default XML format file for the myTestSkipCol table:

bcp AdventureWorks2012..myTestSkipCol format nul -f myTestSkipCol_Default.xml -c -x -T  

Il file di formato non XML predefinito risultante descrive una corrispondenza uno-a-uno tra i campi del file di dati e le colonne di tabella, come segue:The resulting default non-XML format file describes a one-to-one correspondence between data-file fields and table columns, as follows:

\<?xml version="1.0"?>  
\<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  
 <RECORD>  
  \<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="7"/>  
  \<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>  
  \<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>  
 </RECORD>  
 <ROW>  
  \<COLUMN SOURCE="1" NAME="Col1" xsi:type="SQLSMALLINT"/>  
  \<COLUMN SOURCE="2" NAME="Col2" xsi:type="SQLNVARCHAR"/>  
  \<COLUMN SOURCE="3" NAME="Col3" xsi:type="SQLNVARCHAR"/>  
 </ROW>  
</BCPFORMAT>  

Nota

Per informazioni sulla struttura dei file di formato XML, vedere File in formato XML (SQL Server).For information about the structure of XML format files, see XML Format Files (SQL Server).

EsempiExamples

Gli esempi in questa sezione utilizzano la tabella di esempio myTestSkipCol e il file di dati di esempio myTestSkipCol2.dat creati in "File di dati e tabella di esempio", più indietro in questo argomento.The examples in this section use the myTestSkipCol sample table and the myTestSkipCol2.dat sample data file that are created in "Sample Table and Data File," earlier in this topic. Per importare i dati da myTestSkipCol2.dat nella tabella myTestSkipCol , gli esempi utilizzano il file di formato XML modificato seguente, myTestSkipCol2-x.xml,To import the data from myTestSkipCol2.dat into the myTestSkipCol table, the examples use the following modified XML format file, myTestSkipCol2-x.xml. basato sul file di formato creato in "Creazione di un file di formato XML predefinito" più indietro in questo argomento.This is based on the format file that is created in "Creating a Default XML Format File," earlier in this topic.

\<?xml version="1.0"?>  
\<BCPFORMAT xmlns="http://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="\r\n" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>  
 </RECORD>  
 <ROW>  
  \<COLUMN SOURCE="1" NAME="Col1" xsi:type="SQLSMALLINT"/>  
  \<COLUMN SOURCE="2" NAME="Col3" xsi:type="SQLNVARCHAR"/>  
 </ROW>  
</BCPFORMAT>  

Utilizzo di OPENROWSET(BULK...)Using OPENROWSET(BULK...)

Nell'esempio seguente viene utilizzato il provider di set di righe con lettura bulk OPENROWSET e il file di formato myTestSkipCol2.xml .The following example uses the OPENROWSET bulk rowset provider and the myTestSkipCol2.xml format file. Nell'esempio viene eseguita l'importazione bulk del file di dati myTestSkipCol2.dat nella tabella myTestSkipCol .The example bulk imports the myTestSkipCol2.dat data file into the myTestSkipCol table. L'istruzione contiene un elenco esplicito di colonne nell'elenco selezionato e nella tabella di destinazione, come richiesto.The statement contains an explicit list of columns in the select list and also in the target table, as required.

Nell'editor di query di SQL Server Management StudioSQL Server Management Studio eseguire il codice seguente:In the SQL Server Management StudioSQL Server Management Studio Query Editor, execute the following code:

USE AdventureWorks2012;  
GO  
INSERT INTO myTestSkipCol  
  (Col1,Col3)  
    SELECT Col1,Col3  
      FROM  OPENROWSET(BULK  'C:\myTestSkipCol2.Dat',  
      FORMATFILE='C:\myTestSkipCol2.Xml'    
       ) as t1 ;  
GO  

Utilizzo di BULK IMPORT in una vistaUsing BULK IMPORT on a View

Nell'esempio seguente viene creata la tabella v_myTestSkipCol nella tabella myTestSkipCol .The following example creates the v_myTestSkipCol on the myTestSkipCol table. Questa vista ignora la seconda colonna della tabella, Col2.This view skips the second table column, Col2. Nell'esempio viene quindi utilizzato BULK INSERT per importare il file di dati myTestSkipCol2.dat in questa vista.The example then uses BULK INSERT to import the myTestSkipCol2.dat data file into this view.

Nell'editor di query di SQL Server Management StudioSQL Server Management Studio eseguire il codice seguente:In the SQL Server Management StudioSQL Server Management Studio Query Editor, execute the following code:

CREATE VIEW v_myTestSkipCol AS  
    SELECT Col1,Col3  
    FROM myTestSkipCol;  
GO  

USE AdventureWorks2012;  
GO  
BULK INSERT v_myTestSkipCol  
FROM 'C:\myTestSkipCol2.dat'  
WITH (FORMATFILE='C:\myTestSkipCol2.xml');  
GO  

Vedere ancheSee Also

bcp Utility bcp Utility
BULK INSERT (Transact-SQL) BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL) OPENROWSET (Transact-SQL)
Utilizzo di un file di formato per ignorare una colonna di una tabella (SQL Server) Use a Format File to Skip a Data Field (SQL Server)
Utilizzo di un file di formato per eseguire il mapping tra le colonne della tabella e i campi del file di dati (SQL Server) Use a Format File to Map Table Columns to Data-File Fields (SQL Server)
Utilizzo di un file di formato per l'importazione bulk dei dati (SQL Server)Use a Format File to Bulk Import Data (SQL Server)