Sintassi dello schema per file di formato XML
In questa sezione viene descritta la sintassi dei file di formato XML. Per informazioni sulla corrispondenza tra la sintassi e i file di formato XML effettivi, vedere File di formato XML di esempio. Viene inoltre esaminato l'utilizzo di elementi <ROW> e <COLUMN> nell'importazione di massa, nonché spiegato come inserire il valore xsi:type di un elemento in un set di dati.
È possibile utilizzare un file di formato XML con un comando bcp, un'istruzione BULK INSERT o INSERT ... SELECT * FROM OPENROWSET(BULK...).
[!NOTA] La modifica di un file di formato consente di eseguire l'importazione di massa 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 ulteriori informazioni, vedere Utilizzo di un file di formato per eseguire il mapping tra campi e colonne durante l'importazione di massa.
Sintassi di base dello schema XML
Nelle istruzioni seguenti sono riportati solo gli elementi (<BCPFORMAT>, <RECORD>, <FIELD>, <ROW> e <COLUMN>) e i relativi attributi di base.
<BCPFORMAT ...>
<RECORD>
<FIELD ID = "fieldID" xsi:type = "fieldType" [...]
/>
</RECORD>
<ROW>
<COLUMN SOURCE = "fieldID" NAME = "columnName" xsi:type = "columnType" [...]
/>
</ROW>
</BCPFORMAT>
[!NOTA] Gli altri attributi associati al valore di xsi:type in un elemento <FIELD> o <COLUMN> sono descritti più avanti in questo argomento.
Descrizione degli elementi dello schema
In questa sezione viene illustrato brevemente lo scopo di ciascun elemento definito dallo schema XML per i file di formato XML. Gli attributi sono descritti in apposite sezioni più avanti in questo argomento.
- <BCPFORMAT>
Corrisponde all'elemento del file di formato che definisce la struttura del record di un file di dati specifico e la relativa corrispondenza con le colonne di una riga della 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.Per una descrizione degli attributi di questo elemento, vedere "Attributi dell'elemento <FIELD>", più avanti in questo argomento.
<ROW .../>
Definisce un elemento complesso contenente uno o più elementi <COLUMN>. L'ordine degli elementi <COLUMN> è indipendente da quello degli elementi <FIELD> in una definizione RECORD. L'ordine degli elementi <COLUMN> in un file di formato determina invece l'ordine delle colonne del set di righe risultante. I campi di dati vengono caricati nell'ordine con cui vengono dichiarati gli elementi <COLUMN> corrispondenti nell'elemento <COLUMN>.Per ulteriori informazioni, vedere "Utilizzo dell'elemento <ROW> nell'importazione di massa", più avanti in questo argomento.
<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>.Per una descrizione degli attributi di questo elemento, vedere "Attributi dell'elemento <COLUMN>", più avanti in questo argomento. Vedere inoltre "Utilizzo dell'elemento <COLUMN> nell'importazione di massa", più avanti in questo argomento.
- </BCPFORMAT>
Richiesto per terminare il file di formato.
Attributi dell'elemento <FIELD>
In questa sezione sono illustrati 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 FIELD | Descrizione | Facoltativo / Obbligatorio |
---|---|---|
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"/> |
Necessario |
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 gli attributi opzionali, riportati di seguito, necessari in un'istanza specifica. |
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 venga richiesto dal valore xsi:type |
PREFIX_LENGTH ="p" |
Definisce la lunghezza del prefisso per una rappresentazione di dati binary. Il valore PREFIX_LENGTH p deve essere uno dei seguenti: 1, 2, 4 o 8. |
Facoltativo, a meno che non richiesto dal valore xsi:type |
MAX_LENGTH ="m" |
Corrisponde al numero massimo di byte archiviabile in un campo specifico. In assenza di una tabella di destinazione, la lunghezza massima della colonna non è nota. L'attributo MAX_LENGTH limita la lunghezza massima di una colonna di testo di output e di conseguenza anche lo spazio di archiviazione allocato al valore della colonna. Tale limitazione risulta particolarmente comoda quando si utilizza 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 è pari a 8000 caratteri per una colonna char e a 4000 caratteri per una colonna nchar. |
Facoltativo |
COLLATION ="collationName" |
Questo attributo è consentito solo per i campi di tipo carattere. Per un elenco dei nomi di regole di confronto SQL, vedere SQL_collation_name (Transact-SQL). |
Facoltativo |
TERMINATOR = "terminator" |
Specifica il carattere di terminazione di un campo di dati. Il carattere di terminazione può essere costituito da un carattere qualsiasi, univoco e non facente parte dei dati. Per impostazione predefinita, il carattere di terminazione corrisponde al carattere di tabulazione, rappresentato come \t. Per rappresentare un segno di paragrafo, utilizzare \r\n. |
Viene utilizzato solo con un valore xsi:type di dati di tipo carattere, per il quale è necessario specificare questo attributo. |
Valori Xsi:type dell'elemento <FIELD>
Il valore xsi:type è un costrutto XML, utilizzato in modo simile a un attributo, che identifica il tipo di dati di un'istanza di un elemento. Per informazioni sull'utilizzo di questo valore, vedere "Inserimento del valore xsi:type in un set di dati", più avanti in questa sezione.
Con valore xsi:type dell'elemento <FIELD> sono supportati i tipi di dati seguenti.
Valori xsi:type di <FIELD> | 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 ulteriori informazioni sui tipi di dati di Microsoft SQL Server, vedere Tipi di dati (Transact-SQL).
Attributi dell'elemento <COLUMN>
In questa sezione sono illustrati 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 l'associazione di un campo a una colonna nella tabella di destinazione vengono utilizzati gli attributi seguenti:
Attributo COLUMN
Descrizione
Facoltativo / Obbligatorio
SOURCE ="fieldID"
Specifica l'ID del campo da associare alla colonna.
<COLUMN SOURCE**="fieldID"/> esegue il mapping a <FIELD ID="fieldID"**/>
Necessario
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.
Obbligatorio
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 gli attributi opzionali, riportati di seguito, necessari in un'istanza specifica.
Nota:
Nella tabella seguente sono elencati i possibili valori di ColumnType nonché i relativi attributi associati.
Facoltativo
LENGTH ="n"
Definisce la lunghezza per un'istanza di un tipo di dati a lunghezza fissa. Viene utilizzato solo quanto il valore xsi:type corrisponde a un tipo di dati string.
Il valore di n deve essere un numero intero positivo.
Facoltativo (disponibile solo se il valore xsi:type corrisponde a un tipo di dati string)
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 valore xsi:type corrisponde a 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 valore xsi:type corrisponde a un tipo di dati numerico variabile)
NULLABLE = { "YES"
"NO" }
Indica se una colonna supporta o meno valori NULL. Questo attributo è completamente indipendente da FIELDS. Se, tuttavia, una colonna non è NULLABLE e il valore del campo è NULL, ovvero non è stato specificato alcun valore, verrà restituito un errore di run-time.
Facoltativo (disponibile per qualsiasi tipo di dati)
Valori Xsi:type dell'elemento <COLUMN>
Il valore xsi:type è un costrutto XML, utilizzato in modo simile a un attributo, che identifica il tipo di dati di un'istanza di un elemento. Per informazioni sull'utilizzo di questo valore, vedere "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 descritto di seguito:
Categoria del tipo | Tipi di dati di <COLUMN> | 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, SQLVARIANT e SQLUNIQUEID |
Nessuno. |
NULLABLE |
Numero variabile |
SQLDECIMAL e SQLNUMERIC |
Nessuno. |
NULLABLE, PRECISION, SCALE |
LOB |
SQLIMAGE, CharLOB, SQLTEXT e SQLUDT |
Nessuno. |
NULLABLE |
Character LOB |
SQLNTEXT |
Nessuno. |
NULLABLE |
Stringa binaria |
SQLBINARY e SQLVARYBIN |
Nessuno. |
NULLABLE, LENGTH |
Stringa di caratteri |
SQLCHAR, SQLVARYCHAR, SQLNCHAR e SQLNVARCHAR |
Nessuno. |
NULLABLE, LENGTH |
Importante: |
---|
Per eseguire l'esportazione o l'importazione di massa dei dati SQLXML, utilizzare uno dei tipi di dati seguenti nel file di formato: SQLCHAR o SQLVARYCHAR (i dati vengono inviati nella tabella codici del client o nella tabella codici implicita nelle regole di confronto), SQLNCHAR o SQLNVARCHAR (i dati vengono inviati come Unicode) oppure SQLBINARY o SQLVARYBIN (i dati vengono inviati senza conversione). |
Per ulteriori informazioni sui tipi di dati di SQL Server, vedere Tipi di dati (Transact-SQL).
Utilizzo dell'elemento <ROW> nell'importazione di massa
L'elemento <ROW> può influire su un'operazione di importazione di massa a seconda della modalità con cui viene eseguita tale operazione:
Comando bcp
Quando i dati vengono caricati in una tabella di destinazione, bcp ignora il componente <ROW> e carica i dati sulla base dei tipi di colonna della tabella di destinazione.Istruzioni T-SQL (provider di set di righe con lettura di massa BULK INSERT e OPENROWSET)
Durante l'importazione di massa di dati in una tabella, nelle istruzioni Transact-SQL viene utilizzato il componente <ROW> per generare il set di righe di input. Le istruzioni Transact-SQL eseguono inoltre conversioni appropriate dei tipi sulla base dei tipi di colonna specificati in <ROW> e della 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. Tale ulteriore conversione può comportare alcune discrepanze, ovvero mancanze di precisione, nel comportamento del provider di set di righe con lettura di massa di BULK INSERT o OPENROWSET rispetto a quanto ottenuto con il comando bcp.
Le informazioni presenti nell'elemento <ROW> consentono di costruire una riga senza richiedere ulteriori informazioni. È quindi possibile generare un set di righe tramite un'istruzione SELECT (SELECT * FROM OPENROWSET(BULK datafile FORMATFILE=xmlformatfile).[!NOTA] La clausola OPENROWSET BULK comporta la specifica di un file di formato. Si noti che la conversione da un tipo di dati del campo al tipo di dati di una colonna è disponibile solo tramite un file di formato XML.
Utilizzo dell'elemento <COLUMN> nell'importazione di massa
Per consentire l'importazione di massa di dati in una tabella, gli elementi <COLUMN> di un file di formato associano un campo del file di dati alle colonne della 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.
In caso di mancata associazione delle colonne a un campo, quest'ultimo non verrà copiato nella riga o nelle righe generate. Questo comportamento consente a un file di dati di generare righe con diverse colonne e in diverse tabelle.
Analogamente, per consentire l'esportazione di massa di dati da una tabella, ogni <COLUMN> del file di formato associa la colonna della riga della tabella di input al campo corrispondente del file di dati di output.
Inserimento del valore xsi:type in un set di dati
Quando per la convalida di un documento XML si utilizza il linguaggio XML Schema Definition (XSD), il valore xsi:type non viene inserito nel set di dati. Per inserire le informazioni relativi al valore xsi:type nel set di dati, è tuttavia possibile caricare 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");
}
Vedere anche
Concetti
File di formato XML di esempio
Utilizzo dei file di formato