File di formato XML (SQL Server)
Si applica a:SQL Server
Database SQL di Azure
Istanza gestita di SQL di Azure
Azure Synapse Analytics
Analytics 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 diRECORD
. 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'attributoSOURCE
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 , 4 o 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
valoriAttributi XML obbligatori
per il tipo di datiAttributi XML facoltativi
per il tipo di datiNativeFixed
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 /
RichiestoSOURCE="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 daFIELDS
. Tuttavia, se una colonna non è annullabile e il campo specificaNULL
, cioè senza specificare alcun valore, viene restituito un errore di runtime.
L'attributoNULLABLE
viene usato solo se si esegue un'istruzioneSELECT 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 valorexsi: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 datiAttributi XML obbligatori
per il tipo di datiAttributi XML facoltativi
per il tipo di datifisso SQLBIT
,SQLTINYINT
,SQLSMALLINT
,SQLINT
,SQLBIGINT
,SQLFLT4
,SQLFLT8
,SQLDATETIME
,SQLDATETIM4
,SQLDATETIM8
,SQLMONEY
,SQLMONEY4
,SQLVARIANT
eSQLUNIQUEID
Nessuno. NULLABLE
numero variabile SQLDECIMAL
eSQLNUMERIC
Nessuno. NULLABLE
,PRECISION
,SCALE
Variabile data e ora SQLDATETIME2
,SQLTIME
,SQLDATETIMEOFFSET
Nessuno. NULLABLE
,SCALE
LOB SQLIMAGE
,CharLOB
,SQLTEXT
eSQLUDT
Nessuno. NULLABLE
Carattere LOB SQLNTEXT
Nessuno. NULLABLE
stringa binaria SQLBINARY
eSQLVARYBIN
Nessuno. NULLABLE
,LENGTH
stringa di caratteri SQLCHAR
,SQLVARYCHAR
,SQLNCHAR
eSQLNVARCHAR
Nessuno. NULLABLE
,LENGTH
Importante
Per esportare o importare dati SQLXML in blocco, usare uno dei tipi di dati seguenti nel file di formato:
SQLCHAR
oSQLVARYCHAR
(i dati vengono inviati nella tabella codici client o nella tabella codici implicita dalle regole di confronto),SQLNCHAR
oSQLNVARCHAR
(i dati vengono inviati come Unicode) oSQLBINARY
oSQLVARYBIN
(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 di
BULK INSERT
eOPENROWSET
)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 diBULK INSERT
oOPENROWSET
rispetto 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'istruzioneSELECT
(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:
- Ordina i campi dei dati di carattere allo stesso modo delle colonne della tabella
- ordinare i campi dati e le colonne di tabella in modo diverso
- Omettere un campo dati
- Mappare diversi tipi di campi alle colonne
- Eseguire il mapping dei dati XML a una tabella
- Importare campi a lunghezza fissa o a larghezza fissa
- Altri esempi
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>
Nota
Per un esempio equivalente di AdventureWorks2022
, vedi Usare un file di formato per eseguire il mapping tra le colonne della tabella e i campi del file di dati (SQL Server).
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_xml
in 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:
- Usare 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)
- Usare un file di formato per eseguire il mapping tra le colonne di tabella e i campi del file di dati (SQL Server)
Attività correlate
- Creazione di un file di formato (SQL Server)
- Usare un file di formato per l'importazione massiva dei dati (SQL Server)
- Usare 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)
- Usare un file di formato per eseguire il mapping tra le colonne di tabella e i campi del file di dati (SQL Server)