Condividi tramite


Introduzione ai file di formato

Per file di formato si intende un file utilizzato per archiviare informazioni sul formato per ogni campo in un file di dati relativo a una tabella specificata. Un file di formato include tutte le informazioni sul formato necessarie per l'esportazione o l'importazione bulk dei dati. Un file di formato è un sistema flessibile per la scrittura di file di dati che non richiede alcuna modifica o richiede modifiche minime per la conformità con altri formati di dati o la lettura di file di dati da un altro prodotto software..

In MicrosoftSQL Server 2000 e versioni precedenti l'esportazione e l'importazione bulk supportano un solo tipo di file di formato, che è ancora supportato. SQL Server 2005 e versioni successive tuttavia supportano in alternativa anche file XML. I file di formato del tipo originale sono detti file di formato non XML.

Tutti i file di formato includono descrizioni di ogni campo di un file di dati. I file di formato XML includono inoltre descrizioni delle colonne di tabella corrispondenti. In generale, i file di formato XML e non XML sono intercambiabili. È tuttavia consigliabile utilizzare la sintassi XML per i nuovi file di formato in quanto essi offrono numerosi vantaggi rispetto ai file di formato non XML. Un file di formato XML ha le caratteristiche seguenti:

  • È autodescrittivo e semplice da leggere, creare e ampliare.

  • Include i tipi di dati delle colonne di destinazione.

    Consente la separazione tra la modalità di rappresentazione dei dati nel file di dati e il tipo di dati associato a ogni campo nel file. Ad esempio, se il file di dati include una rappresentazione dei caratteri dei dati, il tipo della colonna SQL corrispondente viene perduto.

    Il comando bcp e l'istruzione BULK INSERT utilizzano le colonne della tabella di destinazione per eseguire la conversione di tipo. Questo rende necessaria la presenza di una tabella di destinazione. Al contrario, la funzione OPENROWSET(BULK...) si basa su un file di formato XML per la lettura dei dati da un file di dati. In questo caso, la tabella di destinazione è facoltativa.

  • Consente il caricamento di un campo in cui è contenuto un unico tipo di dati LOB (Large Object) da un file di dati.

  • La sintassi di un file di formato è indipendente dalla direzione dell'operazione, ovvero è identica sia per l'esportazione bulk sia per l'importazione bulk.

Per informazioni sul layout di ogni tipo di file di formato, vedere "Esempi" di seguito in questo argomento.

Quando è necessario un file di formato?

Un'istruzione INSERT ... SELECT * FROM OPENROWSET(BULK...) richiede sempre un file di formato.

  • Per bcp o BULK INSERT, in situazioni non complesse, l'utilizzo di un file di formato è facoltativo e solo raramente necessario. In situazioni di importazione bulk complesse, tuttavia, un file di formato è spesso necessario.

I file di formato sono necessari nei casi seguenti:

  • Viene utilizzato lo stesso file di dati come origine per più tabelle con schemi diversi.

  • I campi nel file di dati sono in numero diverso rispetto alle colonne della tabella di destinazione, ad esempio:

    • La tabella di destinazione include almeno una colonna per la quale un valore predefinito è definito o è consentito un valore NULL.

    • L'utente non dispone di autorizzazioni SELECT/INSERT su una o più colonne della tabella.

    • Un singolo file di dati è utilizzato con due o più tabelle con schemi diversi.

  • L'ordine delle colonne è diverso nel file di dati rispetto alla tabella.

  • I caratteri di terminazione o le lunghezze di prefisso sono diverse all'interno delle colonne del file di dati.

[!NOTA]

In assenza di un file di formato, se un comando bcp specifica un'opzione di formato di dati (-n, -c, -w o -N) o se un'operazione BULK INSERT specifica l'opzione DATAFILETYPE, il formato di dati specificato viene utilizzato come metodo predefinito per l'interpretazione dei campi del file di dati.

Esempi

Negli esempi seguenti viene illustrato il layout di un file di formato non XML e di un file di formato XML. Questi file di formato corrispondono alla tabella HumanResources.myTeam nel database di esempio AdventureWorks. Questa tabella contiene quattro colonne: EmployeeID, Name, Title e ModifiedDate.

[!NOTA]

Per informazioni sulla tabella e sulla procedura per la sua creazione, vedere Creazione della tabella HumanResources.myTeam.

A. Utilizzo di un file di formato non XML

Il file di formato non XML seguente utilizza il formato di dati nativo di SQL Server per la tabella HumanResources.myTeam. Questo file di formato è stato creato utilizzando il comando bcp seguente.

bcp AdventureWorks.HumanResources.myTeam format nul -f myTeam.Fmt -n -T 
The contents of this format file are as follows: 9.0
4
1       SQLSMALLINT   0       2       ""   1     EmployeeID               ""
2       SQLNCHAR      2       100     ""   2     Name                     SQL_Latin1_General_CP1_CI_AS
3       SQLNCHAR      2       100     ""   3     Title                    SQL_Latin1_General_CP1_CI_AS
4       SQLNCHAR      2       100     ""   4     Background               SQL_Latin1_General_CP1_CI_AS

Per ulteriori informazioni, vedere Informazioni sui file di formato non XML.

B. Utilizzo di un file di formato XML

Il file di formato XML seguente utilizza il formato di dati nativo di SQL Server per la tabella HumanResources.myTeam. Questo file di formato è stato creato utilizzando il comando bcp seguente.

bcp AdventureWorks.HumanResources.myTeam format nul -f myTeam.Xml -x -n -T 

Il file di formato contiene:

 <?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="NativePrefix" LENGTH="1"/>
  <FIELD ID="2" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="EmployeeID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Name" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="Title" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="Background" xsi:type="SQLNVARCHAR"/>
 </ROW>
</BCPFORMAT>

Per ulteriori informazioni, vedere Informazioni sui file di formato XML.

Vedere anche

Concetti