Condividi tramite


File di formato XML (SQL Server)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)

SQL Server fornisce un XML Schema che definisce la sintassi per la scrittura di file di formato XML da usare per l'importazione bulk dei dati in una tabella di SQL Server. I file di formato XML devono essere conformi a questo schema, definito in XML Schema Definition Language (XSDL). I file di formato XML sono supportati solo quando gli strumenti di SQL Server vengono installati insieme a SQL Server Native Client.

È possibile utilizzare un file di formato XML con un comando bcp, istruzione BULK INSERT o istruzione INSERT ... SELECT * FROM OPENROWSET(BULK...). Il comando bcp consente di generare automaticamente un file di formato XML per una tabella; Per altre informazioni, vedere utilità bcp.

Sono supportati due tipi di file di formato per l'esportazione e l'importazione in blocco: file di formato non XML e file di formato XML. I file di formato XML offrono un'alternativa flessibile ed efficiente rispetto ai file di formato non XML. Per informazioni sui file di formato non XML, vedere Usare file di formato non XML (SQL Server).

Nota

Questa sintassi, incluso l'inserimento bulk, non è supportata in Azure Synapse Analytics. ** In Azure Synapse Analytics e in altre integrazioni della piattaforma di database cloud, lo spostamento dei dati può essere eseguito tramite 'istruzione COPY in Azure Data Factoryoppure mediante l'uso di istruzioni T-SQL come COPY INTO e PolyBase.

Vantaggi dei file di formato XML

I file di formato XML sono autodescrittivi, semplificandone la lettura, la creazione e l'estensione. Sono leggibili e semplificano la comprensione del modo in cui i dati vengono interpretati durante le operazioni in blocco.

I file di formato XML contengono i tipi di dati delle colonne di destinazione. La codifica XML descrive in modo semplice i tipi di dati e gli elementi dati del file di dati, nonché il mapping tra gli elementi dati e le colonne della tabella.

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.

Un file di formato XML consente il caricamento di un campo contenente un unico tipo di dati LOB (Large Object) da un file di dati.

È possibile apportare miglioramenti a un file di formato XML, mantenendolo tuttavia compatibile con le versioni precedenti. La semplicità della codifica XML facilita inoltre la creazione di più file di formato per un file di dati specifico, il che risulta utile nel caso sia necessario eseguire il mapping di tutti i campi dati o parte di essi a colonne di tabelle o viste diverse.

La sintassi XML è indipendente dalla direzione dell'operazione, ovvero è identica sia per l'esportazione bulk che per l'importazione bulk.

È possibile utilizzare i file di formato XML per l'importazione bulk dei dati in tabelle o in viste non partizionate e per l'esportazione bulk dei dati.

Nella funzione OPENROWSET(BULK...), specificare una tabella di destinazione è facoltativo. poiché la funzione si basa su un file di formato XML per la lettura dei dati da un file di dati.

Nota

Una tabella di destinazione è necessaria con il comando bcp e l'istruzione BULK INSERT, che usa le colonne della tabella di destinazione per eseguire la conversione del tipo.

Struttura dei file di formato XML

Analogamente a un file di formato non XML, un file di formato XML definisce il formato e la struttura dei campi dati di un file di dati ed esegue il mapping di tali campi alle colonne di una singola tabella di destinazione.

Un file di formato XML dispone di due componenti principali, <RECORD> e <ROW>:

  • <RECORD> descrive i dati archiviati nel file di dati.

    Ogni elemento <RECORD> contiene un set di uno o più elementi <FIELD>. Questi elementi corrispondono ai campi del file di dati. La sintassi di base è la seguente:

    <RECORD>
        <FIELD .../> [ ...n ]
    </RECORD>
    

    Ogni elemento <FIELD> descrive il contenuto di un campo dati specifico. È possibile eseguire il mapping di un campo unicamente a una colonna della tabella. Non è tuttavia necessario eseguire il mapping di tutti i campi a colonne.

    Un campo di un file di dati può essere a lunghezza fissa o variabile oppure può terminare con un carattere. Un valore di campo può essere rappresentato come: un carattere (usando una rappresentazione a byte singolo), un carattere wide (usando rappresentazione a 2 byte Unicode), un formato di database nativo o un nome di file. Se un valore del campo è rappresentato da un nome di file, tale nome punta al file contenente il valore di una colonna BLOB della tabella di destinazione.

  • <ROW> descrive come costruire righe di dati da un file di dati quando i dati del file vengono importati in una tabella di SQL Server.

    Un elemento <ROW> contiene un set di elementi <COLUMN>. Questi elementi corrispondono alle colonne della tabella. La sintassi di base è la seguente:

    <ROW>
        <COLUMN .../> [ ...n ]
    </ROW>
    

    Ogni elemento <COLUMN> può essere mappato a un solo campo nel file di dati. L'ordine degli elementi <COLUMN> nell'elemento <ROW> definisce l'ordine in cui l'operazione bulk le restituisce. Il file di formato XML assegna a ogni elemento <COLUMN> un nome locale che non ha alcuna relazione con la colonna nella tabella di destinazione di un'operazione di importazione bulk.

Sintassi dello schema per i file di formato XML

In questa sezione è incluso un riepilogo degli elementi e degli attributi di XML Schema per i file di formato XML. La sintassi di un file di formato è indipendente dalla direzione dell'operazione, ovvero è identica sia per l'esportazione bulk che per l'importazione bulk. In questa sezione viene inoltre illustrato come l'importazione bulk usa gli elementi <ROW> e <COLUMN> e come inserire il valore xsi:type di un elemento in un set di dati.

Per informazioni sulla corrispondenza tra la sintassi e i file di formato XML effettivi, vedi File di formato XML di esempio.

Nota

È possibile modificare un file di formato per eseguire l'importazione bulk da un file di dati in cui il numero e/o l'ordine dei campi differisce dal numero e/o dall'ordine delle colonne della tabella. Per altre informazioni, vedere File di formato per importare o esportare dati (SQL Server).

Sintassi di base di XML Schema

Queste istruzioni di sintassi mostrano solo gli elementi (<BCPFORMAT>, <RECORD>, <FIELD>, <ROW>e <COLUMN>) e i relativi attributi di base.

Nota

Altri attributi associati al valore del xsi:type in un elemento <FIELD> o <COLUMN> vengono descritti più avanti in questo articolo.

Elementi dello schema

In questa sezione viene riepilogato lo scopo di ciascun elemento definito da XML Schema per i file di formato XML. Gli attributi sono descritti in sezioni separate più avanti in questo articolo.

  • <BCPFORMAT>

    Elemento format-file che definisce la struttura di record di un determinato file di dati e la relativa corrispondenza con le colonne di una riga di tabella nella tabella.

  • <RECORD .../>

    Definisce un elemento complesso contenente uno o più elementi <FIELD>. L'ordine con cui i campi vengono dichiarati nel file di formato corrisponde a quello con cui tali campi sono riportati nel file di dati.

  • <FIELD .../>

    Definisce un campo, contenente dati, nel file di dati. Gli attributi di questo elemento vengono illustrati in Attributi dell'elemento <FIELD>, più avanti in questo articolo.

  • <ROW .../>

    Definisce un elemento complesso contenente uno o più elementi <COLUMN>. L'ordine degli elementi <COLUMN> è indipendente dall'ordine degli elementi <FIELD> in una definizione di RECORD. L'ordine degli elementi <COLUMN> in un file di formato determina invece l'ordine di colonna del set di righe risultante. I campi dati vengono caricati nell'ordine in cui gli elementi <COLUMN> corrispondenti vengono dichiarati nell'elemento <COLUMN>. Per ulteriori informazioni, vedere Come l'importazione in blocco utilizza l'elemento <ROW>, più avanti in questo articolo.

  • <COLUMN>

    Definisce una colonna come elemento (<COLUMN>). Ogni elemento <COLUMN> corrisponde a un elemento <FIELD> (il cui ID viene specificato nell'attributo SOURCE dell'elemento <COLUMN>). Gli attributi di questo elemento vengono illustrati in Attributi dell'elemento <COLUMN>, più avanti in questo articolo. Si veda anche Come l'importazione di massa usa l'elemento <COLUMN> e, più avanti in questo articolo.

  • </BCPFORMAT>

    Richiesto per terminare il file di formato.

Attributi dell'elemento <FIELD>

In questa sezione vengono descritti gli attributi dell'elemento <FIELD>, riepilogati nella sintassi dello schema seguente:

<FIELD
ID ="fieldID"
xsi:type ="fieldType"
[ LENGTH ="n" ]
[ PREFIX_LENGTH ="p" ]
[ MAX_LENGTH ="m" ]
[ COLLATION ="collationName" ]
[ TERMINATOR ="terminator" ]
/>

Ogni elemento <FIELD> è indipendente dagli altri. Per la descrizione di un campo vengono utilizzati gli attributi seguenti:

Attributo Campo Descrizione Facoltativo /
Richiesto
ID="fieldID" Specifica il nome logico del campo nel file di dati. L'ID di un campo rappresenta la chiave utilizzata per fare riferimento al campo.

<FIELD ID="fieldID" /> esegue il mapping a <COLUMN SOURCE="fieldID" />
Richiesto
xsi:type="fieldType" Costrutto XML, utilizzato in modo simile a un attributo, che identifica il tipo dell'istanza dell'elemento. Il valore di fieldType determina quale degli attributi facoltativi necessario in una determinata istanza. Obbligatorio, a seconda del tipo di dati
LENGTH="n" Definisce la lunghezza per un'istanza di un tipo di dati a lunghezza fissa.

Il valore di n deve essere un numero intero positivo.
Facoltativo, a meno che non sia richiesto dal valore xsi:type
PREFIX_LENGTH="p" Definisce la lunghezza del prefisso per una rappresentazione di dati binary. Il PREFIX_LENGTH, p, deve essere uno dei valori seguenti: 1, 2, 4o 8. Facoltativo, a meno che non sia richiesto dal valore xsi:type
MAX_LENGTH="m" Corrisponde al numero massimo di byte archiviabile in un campo specifico. Senza una tabella di destinazione, la lunghezza massima della colonna non è nota. L'attributo MAX_LENGTH limita la lunghezza massima di una colonna di caratteri di output, limitando lo spazio di archiviazione allocato per il valore della colonna. Ciò è particolarmente utile quando si usa l'opzione BULK della funzione OPENROWSET in una clausola SELECT FROM.

Il valore di m deve essere un numero intero positivo. Per impostazione predefinita, la lunghezza massima è di 8.000 caratteri per una colonna char e 4.000 caratteri per una colonna nchar.
Facoltativo
COLLATION="collationName" COLLATION è consentito solo per i campi di carattere. Per un elenco dei nomi delle regole di confronto di SQL Server, vedere nome delle regole di confronto di SQL Server. Facoltativo
TERMINATOR="terminatore" Specifica il carattere di terminazione di un campo di dati. Il terminatore può essere qualsiasi carattere. Il carattere di terminazione deve essere un carattere univoco che non fa parte dei dati.

Per impostazione predefinita, il carattere di terminazione del campo è il carattere di tabulazione (rappresentato come \t). Per rappresentare un segno di paragrafo, utilizzare \r\n.
Questo attributo viene utilizzato solo con un xsi:type di dati di carattere, che richiedono questo attributo.

  • xsi:type valori dell'elemento <FIELD>

    Il valore xsi:type è un costrutto XML (usato come un attributo) che identifica il tipo di dati di un'istanza di un elemento. Per ulteriori informazioni, vedere la sezione Inserire il valore xsi:type in un set di dati in questo articolo.

    Il valore xsi:type dell'elemento <FIELD> supporta i tipi di dati seguenti.

    <FIELD> xsi:type valori Attributi XML obbligatori
    per il tipo di dati
    Attributi XML facoltativi
    per il tipo di dati
    NativeFixed LENGTH Nessuno.
    NativePrefix PREFIX_LENGTH MAX_LENGTH
    CharFixed LENGTH COLLATION
    NCharFixed LENGTH COLLATION
    CharPrefix PREFIX_LENGTH MAX_LENGTH, COLLATION
    NCharPrefix PREFIX_LENGTH MAX_LENGTH, COLLATION
    CharTerm TERMINATOR MAX_LENGTH, COLLATION
    NCharTerm TERMINATOR MAX_LENGTH, COLLATION

    Per altre informazioni sui tipi di dati di SQL Server, vedere tipi di dati.

  • Attributi dell'elemento <COLUMN>

    In questa sezione vengono descritti gli attributi dell'elemento <COLUMN>, riepilogati nella sintassi dello schema seguente:

    <COLUMN
    SOURCE = "fieldID"
    NAME = "columnName"
    xsi:type = "columnType"
    [ LENGTH = "n" ]
    [ PRECISION = "n" ]
    [ SCALE = "value" ]
    [ NULLABLE = { "YES" | "NO" } ]
    />
    

    Per eseguire il mapping di un campo a una colonna nella tabella di destinazione vengono utilizzati gli attributi seguenti:

    Attributo COLUMN Descrizione Facoltativo /
    Richiesto
    SOURCE="fieldID" Specifica l'ID del campo di cui eseguire il mapping alla colonna.

    <COLUMN SOURCE=fieldID"/> esegue il mapping a <FIELD ID=fieldID"/>
    Richiesto
    NAME="columnName" Specifica il nome della colonna del set di righe rappresentato dal file di formato. Viene utilizzato per identificare la colonna nel set dei risultati e non corrisponde necessariamente al nome di colonna utilizzato nella tabella di destinazione. Richiesto
    xsi:type="ColumnType" Costrutto XML, utilizzato in modo simile a un attributo, che identifica il tipo di dati dell'istanza dell'elemento. Il valore di ColumnType determina quale degli attributi facoltativi necessario in una determinata istanza.

    Nota: I valori possibili di ColumnType e i relativi attributi associati sono elencati nella tabella degli elementi <COLUMN> nei valori di xsi:type dell'elemento <COLUMN> nella sezione.
    Facoltativo
    LENGTH="n" Definisce la lunghezza per un'istanza di un tipo di dati a lunghezza fissa. LENGTH viene usato solo quando l'xsi:type è un tipo di dati stringa.

    Il valore di n deve essere un numero intero positivo.
    Facoltativo (disponibile solo se il xsi:type è un tipo di dati stringa)
    PRECISION="n" Indica il numero di cifre in un numero. Il numero 123,45, ad esempio, ha una precisione di 5.

    Il valore deve essere un numero intero positivo.
    Facoltativo (disponibile solo se il xsi:type è un tipo di dati numerico variabile)
    SCALE="int" Indica il numero di cifre a destra della virgola decimale in un numero. Il numero 123,45, ad esempio, ha una scala di 2.

    Il valore deve essere un numero intero.
    Facoltativo (disponibile solo se il xsi:type è un tipo di dati numerico variabile)
    NULLABLE={ "SÌ" | "NO" } Indica se una colonna può assumere valori NULL. Questo attributo è indipendente da FIELDS. Tuttavia, se una colonna non è annullabile e il campo specifica NULL, cioè senza specificare alcun valore, viene restituito un errore di runtime.

    L'attributo NULLABLE viene usato solo se si esegue un'istruzione SELECT FROM OPENROWSET(BULK...) normale.
    Facoltativo (disponibile per qualsiasi tipo di dati)

  • xsi:type valori dell'elemento <COLUMN>

    Il valore xsi:type è un costrutto XML (usato come un attributo) che identifica il tipo di dati di un'istanza di un elemento. Per informazioni sull'uso di "Inserimento del valore xsi:type in un set di dati" più avanti in questa sezione.

    L'elemento <COLUMN> supporta i tipi di dati SQL nativi, come indicato di seguito:

    Categoria di tipi <COLUMN> tipi di dati Attributi XML obbligatori
    per il tipo di dati
    Attributi XML facoltativi
    per il tipo di dati
    fisso SQLBIT, SQLTINYINT, SQLSMALLINT, SQLINT, SQLBIGINT, SQLFLT4, SQLFLT8, SQLDATETIME, SQLDATETIM4, SQLDATETIM8, SQLMONEY, SQLMONEY4, SQLVARIANTe SQLUNIQUEID Nessuno. NULLABLE
    numero variabile SQLDECIMAL e SQLNUMERIC Nessuno. NULLABLE, PRECISION, SCALE
    Variabile data e ora SQLDATETIME2, SQLTIME, SQLDATETIMEOFFSET Nessuno. NULLABLE, SCALE
    LOB SQLIMAGE, CharLOB, SQLTEXTe SQLUDT Nessuno. NULLABLE
    Carattere LOB SQLNTEXT Nessuno. NULLABLE
    stringa binaria SQLBINARY e SQLVARYBIN Nessuno. NULLABLE, LENGTH
    stringa di caratteri SQLCHAR, SQLVARYCHAR, SQLNCHARe SQLNVARCHAR Nessuno. NULLABLE, LENGTH

    Importante

    Per esportare o importare dati SQLXML in blocco, usare uno dei tipi di dati seguenti nel file di formato: SQLCHAR o SQLVARYCHAR (i dati vengono inviati nella tabella codici client o nella tabella codici implicita dalle regole di confronto), SQLNCHAR o SQLNVARCHAR (i dati vengono inviati come Unicode) o SQLBINARY o SQLVARYBIN (i dati vengono inviati senza alcuna conversione).

    Per altre informazioni sui tipi di dati di SQL Server, vedere tipi di dati.

Come l'importazione in blocco utilizza l'elemento <ROW>

L'elemento <ROW> viene ignorato in alcuni contesti. Il fatto che l'elemento <ROW> influisca su un'operazione di importazione bulk dipende dalla modalità di esecuzione dell'operazione:

  • Comando bcp

    Quando i dati vengono caricati in una tabella di destinazione, bcp ignora il componente <ROW>. Invece, bcp carica i dati in base ai tipi di colonna della tabella di destinazione.

  • istruzioni Transact-SQL (provider di set di righe in blocco diBULK INSERT e OPENROWSET)

    Quando si importano dati in blocco in una tabella, le istruzioni Transact-SQL usano il componente <ROW> per generare l'insieme di righe di input. Inoltre, le istruzioni Transact-SQL eseguono conversioni di tipi appropriate sulla base dei tipi di colonna specificati nella sezione <ROW> e alla colonna corrispondente nella tabella di destinazione. Se i tipi di colonna specificati nel file di formato e quelli della tabella di destinazione non corrispondono, verrà eseguita un'ulteriore conversione dei tipi. Questa conversione di tipo aggiuntiva può causare discrepanze (ovvero una perdita di precisione) nel comportamento del provider bulk rowset di BULK INSERT o OPENROWSETrispetto a bcp.

    Le informazioni contenute nell'elemento <ROW> consentono di costruire una riga senza richiedere informazioni aggiuntive. Per questo motivo, è possibile generare un set di righe usando un'istruzione SELECT (SELECT * FROM OPENROWSET(BULK <data-file> FORMATFILE=<xml-format-file>).

    La clausola OPENROWSET BULK richiede un file di formato. La conversione dal tipo di dati del campo al tipo di dati di una colonna è disponibile solo con un file di formato XML.

Come l'importazione bulk utilizza l'elemento <COLUMN>

Per l'importazione massiva dei dati in una tabella, gli elementi <COLUMN> in un file di formato eseguono la mappatura di un campo di file di dati alle colonne di tabella specificando:

  • La posizione di ogni campo all'interno di una riga del file di dati.

  • Il tipo di colonna utilizzata per la conversione del tipo di dati del campo nel tipo di dati della colonna desiderato.

Se non viene eseguito il mapping di alcuna colonna a un campo, il campo non viene copiato nelle righe generate. Questo comportamento consente a un file di dati di generare righe con diverse colonne e in diverse tabelle.

Analogamente, per l'esportazione bulk di dati da una tabella, ogni <COLUMN> nel file di formato esegue il mapping della colonna dalla riga della tabella di input al campo corrispondente nel file di dati di output.

Inserire il valore xsi:type in un set di dati

Quando un documento XML viene convalidato tramite il linguaggio XSD (XML Schema Definition), il valore xsi:type non viene inserito nel set di dati. È tuttavia possibile inserire le informazioni xsi:type nel set di dati caricando il file di formato XML in un documento XML (ad esempio, myDoc), come illustrato nel frammento di codice seguente:

...;
myDoc.LoadXml(xmlFormat);
XmlNodeList ColumnList = myDoc.GetElementsByTagName("COLUMN");
for (int i = 0; i < ColumnList.Count; i++)
{
    Console.Write($"COLUMN: xsi:type={ColumnList[i].Attributes["type",
        "http://www.w3.org/2001/XMLSchema-instance"].Value}\n");
}

File di formato XML di esempio

Questa sezione contiene informazioni sull'uso di file di formato XML in vari casi, incluso un esempio adventure works.

Nota

Nei file di dati mostrati negli esempi seguenti, <tab> indica un carattere di tabulazione in un file di dati, e <return> indica un ritorno carrello.

Negli esempi vengono illustrati alcuni aspetti fondamentali relativi all'utilizzo dei file di formato XML, come indicato di seguito:

Per informazioni su come creare file di formato, vedere Creare un file di formato (QL Server).

A. Ordina i campi di dati carattere nello stesso ordine delle colonne della tabella

Nell'esempio seguente viene illustrato un file di formato XML che descrive un file di dati contenente tre campi dati di tipo carattere. Il file di formato esegue il mapping tra il file di dati e una tabella che contiene tre colonne. Tra i campi dati e le colonne della tabella esiste una corrispondenza di tipo uno-a-uno.

  • tabella (riga):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • file di dati (record):Age<tab>FirstName<tab>LastName<return>

Il file di formato XML seguente legge dal file di dati alla tabella.

Nell'elemento <RECORD> il file di formato rappresenta i valori dei dati di tutti e tre i campi come dati di tipo carattere. Per ogni campo, l'attributo TERMINATOR indica il carattere di terminazione che segue il valore dei dati.

Tra i campi dati e le colonne della tabella esiste una corrispondenza di tipo uno-a-uno. Nell'elemento <ROW> il file di formato esegue il mapping tra la colonna Age e il primo campo, la colonna FirstName e il secondo campo e la colonna LastName e il terzo campo.

<?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="12" />
        <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="20" COLLATION="SQL_Latin1_General_CP1_CI_AS" />
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n"
            MAX_LENGTH="30"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT" />
        <COLUMN SOURCE="2" NAME="firstname" xsi:type="SQLVARYCHAR" />
        <COLUMN SOURCE="3" NAME="lastname" xsi:type="SQLVARYCHAR" />
    </ROW>
</BCPFORMAT>

Nota

Per un esempio equivalente di AdventureWorks2022, vedi Creare un file di formato (SQL Server).

B. Ordinamento dei campi dati diverso da quello delle colonne della tabella

Nell'esempio seguente viene illustrato un file di formato XML che descrive un file di dati contenente tre campi dati di tipo carattere. Il file di formato esegue il mapping tra il file di dati e una tabella che contiene tre colonne ordinate in modo diverso rispetto ai campi del file di dati.

  • tabella (riga):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • file di dati (record):Age<tab>FirstName<tab>LastName<return>

Nell'elemento <RECORD> il file di formato rappresenta i valori dei dati di tutti e tre i campi come dati di tipo carattere.

Nell'elemento <ROW> il file di formato esegue il mapping tra la colonna Age e il primo campo, la colonna FirstName e il terzo campo e la colonna LastName e il secondo campo.

<?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="12" />
        <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="20"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n"
            MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT" />
        <COLUMN SOURCE="3" NAME="firstname" xsi:type="SQLVARYCHAR" />
        <COLUMN SOURCE="2" NAME="lastname" xsi:type="SQLVARYCHAR" />
    </ROW>
</BCPFORMAT>

C. Omissione di un campo dati

Nell'esempio seguente viene illustrato un file di formato XML che descrive un file di dati contenente quattro campi dati di tipo carattere. Il file di formato esegue il mapping tra il file di dati e una tabella che contiene tre colonne. Il secondo campo dati non corrisponde ad alcuna colonna di tabella.

  • tabella (riga):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • file di dati (record):Age<tab>FirstName<tab>LastName<return>

Nell'elemento <RECORD> il file di formato rappresenta i valori dei dati di tutti e quattro i campi come dati di tipo carattere. Per ogni campo, l'attributo TERMINATOR indica il carattere di terminazione che segue il valore dei dati.

Nell'elemento <ROW> il file di formato esegue il mapping tra la colonna Age e il primo campo, la colonna FirstName e il terzo campo e la colonna LastName e il quarto campo.

<?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="12" />
        <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="10"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="20"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
        <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n"
            MAX_LENGTH="30"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT" />
        <COLUMN SOURCE="3" NAME="firstname" xsi:type="SQLVARYCHAR" />
        <COLUMN SOURCE="4" NAME="lastname" xsi:type="SQLVARYCHAR" />
    </ROW>
</BCPFORMAT>

Nota

Per un esempio equivalente di AdventureWorks2022, vedi Usare un file di formato per escludere un campo di dati (SQL Server).

D. Eseguire il mapping di <FIELD> xsi:type a <COLUMN> xsi:type

Nell'esempio seguente vengono illustrati tipi diversi di campi e i relativi mapping alle colonne.

<?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 xsi:type="CharTerm" ID="C1" TERMINATOR="\t"
            MAX_LENGTH="4" />
        <FIELD xsi:type="CharFixed" ID="C2" LENGTH="10"
            COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
        <FIELD xsi:type="CharPrefix" ID="C3" PREFIX_LENGTH="2"
            MAX_LENGTH="32" COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
        <FIELD xsi:type="NCharTerm" ID="C4" TERMINATOR="\t"
            MAX_LENGTH="4" />
        <FIELD xsi:type="NCharFixed" ID="C5" LENGTH="10"
            COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
        <FIELD xsi:type="NCharPrefix" ID="C6" PREFIX_LENGTH="2"
            MAX_LENGTH="32" COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
        <FIELD xsi:type="NativeFixed" ID="C7" LENGTH="4" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="C1" NAME="Age" xsi:type="SQLTINYINT" />
        <COLUMN SOURCE="C2" NAME="FirstName" xsi:type="SQLVARYCHAR"
            LENGTH="16" NULLABLE="NO" />
        <COLUMN SOURCE="C3" NAME="LastName" />
        <COLUMN SOURCE="C4" NAME="Salary" xsi:type="SQLMONEY" />
        <COLUMN SOURCE="C5" NAME="Picture" xsi:type="SQLIMAGE" />
        <COLUMN SOURCE="C6" NAME="Bio" xsi:type="SQLTEXT" />
        <COLUMN SOURCE="C7" NAME="Interest" xsi:type="SQLDECIMAL"
            PRECISION="5" SCALE="3" />
    </ROW>
</BCPFORMAT>

E. Mappa i dati XML su una tabella

Nell'esempio seguente viene creata una tabella vuota a due colonne denominatat_xmlin cui viene eseguito il mapping tra la prima colonna e il tipo di dati int e tra la seconda colonna e il tipo di dati xml .

CREATE TABLE t_xml (c1 INT, c2 XML);

Il file di formato XML seguente carica un file di dati nella tabella t_xml.

<?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="NativePrefix" PREFIX_LENGTH="1" />
        <FIELD ID="2" xsi:type="NCharPrefix" PREFIX_LENGTH="8" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="c1" xsi:type="SQLINT" />
        <COLUMN SOURCE="2" NAME="c2" xsi:type="SQLNCHAR" />
    </ROW>
</BCPFORMAT>

F. Importazione di campi a lunghezza fissa o a larghezza fissa

Nell'esempio seguente vengono descritti campi fissi di 10 o 6 caratteri ognuno. Il file di formato rappresenta queste lunghezze o larghezze dei campi rispettivamente come LENGTH="10" e LENGTH="6". Ogni riga dei file di dati termina con una combinazione di ritorno a capo-avanzamento riga, <CR><LF>, che il file di formato rappresenta come TERMINATOR="\r\n".

<?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="CharFixed" LENGTH="10" />
        <FIELD ID="2" xsi:type="CharFixed" LENGTH="6" />
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="C1" xsi:type="SQLINT" />
        <COLUMN SOURCE="2" NAME="C2" xsi:type="SQLINT" />
    </ROW>
</BCPFORMAT>

Esempi aggiuntivi

Per altri esempi di file di formato non XML e di file di formato XML, vedere gli articoli seguenti: