Introduzione al caricamento bulk XML (SQLXML 4.0)

Si applica a: SQL Server Azure SQL Database

Il caricamento bulk XML è un oggetto COM autonomo che consente di caricare dati XML semistrutturati in tabelle di Microsoft SQL Server.

È possibile inserire dati XML in un database SQL Server utilizzando un'istruzione INSERT e la funzione OPENXML. L'utilità Caricamento bulk, tuttavia, offre prestazioni migliori quando è necessario inserire grandi quantità di dati XML.

Il metodo Execute del modello a oggetti Caricamento bulk XML accetta due parametri:

  • Uno schema XSD (XML Schema Definition) o uno schema XDR (XML-Data Reduced) con annotazioni. L'utilità di caricamento bulk XML interpreta questo schema di mapping e le annotazioni specificate nello schema per identificare le tabelle di SQL Server nelle quali devono essere inseriti i dati XML.

  • Un documento o un frammento di documento XML (un frammento di documento è un documento privo di un singolo elemento di livello superiore). È possibile specificare un nome file o un flusso dal quale il caricamento bulk XML può leggere.

Il caricamento bulk XML interpreta lo schema di mapping e identifica le tabelle nelle quali devono essere inseriti i dati XML.

Si presuppone che si abbia familiarità con le funzionalità di SQL Server seguenti:

Flusso dei dati XML

Poiché le dimensioni del documento XML di origine possono essere elevate, l'intero documento non viene letto in memoria per l'elaborazione del caricamento bulk. Il caricamento bulk XML interpreta invece i dati XML come un flusso e li legge. Quando l'utilità legge i dati, identifica le tabelle di database, genera i record appropriati dall'origine dati XML e quindi invia i record a SQL Server per l'inserimento.

Ad esempio, il documento XML di <origine seguente è costituito da elementi customer> e <elementi figlio Order> :

<Customer ...>  
    <Order.../>  
    <Order .../>  
     ...  
</Customer>  
...  

Quando il caricamento bulk XML legge l'elemento <Customer> , genera un record per Customertable. Quando legge il <tag di fine /Customer>, il caricamento bulk XML inserisce tale record nella tabella in SQL Server. Nello stesso modo, quando legge l'elemento <Order>, il caricamento bulk XML genera un record per la tabella Ordertable e quindi lo inserisce nella tabella SQL Server durante la lettura del <tag di fine /Order>.

Operazioni di caricamento bulk XML in transazioni e non in transazioni

Il caricamento bulk XML può funzionare in modalità transazionale e non transazionale. Le prestazioni sono in genere ottimali se si esegue il caricamento bulk in modalità non transazionale, ovvero la proprietà Transaction è impostata su FALSE e una delle condizioni seguenti è vera:

  • Le tabelle nelle quali si esegue il caricamento bulk dei dati sono vuote e senza indici.

  • Le tabelle includono dati e indici univoci.

L'approccio non transazionale non garantisce un rollback in caso di errore del processo di caricamento bulk, anche se possono verificarsi rollback parziali. Il caricamento bulk non transazionale è consigliabile quando il database è vuoto. In caso di errore, pertanto, è possibile eseguire una pulizia del database e riavviare il caricamento bulk XML.

Nota

In modalità non transazionale il caricamento bulk XML utilizza una transazione interna predefinita e ne esegue il commit. Quando la proprietà Transaction è impostata su TRUE, il caricamento bulk XML non chiama il commit per questa transazione.

Se la proprietà Transaction è impostata su TRUE, il caricamento bulk XML crea file temporanei, uno per ogni tabella identificata nello schema di mapping. Il caricamento bulk XML archivia innanzitutto i record del documento XML di origine in questi file temporanei. Quindi, un'istruzione Transact-SQL BULK INSERT recupera questi record dai file e li archivia nelle tabelle corrispondenti. È possibile specificare il percorso per questi file temporanei usando la proprietà TempFilePath. È necessario assicurarsi che l'account SQL Server usato con il caricamento bulk XML abbia accesso a questo percorso. Se la proprietà TempFilePath non viene specificata, viene utilizzato il percorso di file predefinito specificato nella variabile di ambiente TEMP per creare i file temporanei.

Se la proprietà Transaction è impostata su FALSE (impostazione predefinita), il caricamento bulk XML utilizza l'interfaccia OLE DB IRowsetFastLoad per caricare in blocco i dati.

Se la proprietà ConnectionString imposta la stringa di connessione e la proprietà Transaction è impostata su TRUE, il caricamento bulk XML viene eseguito nel proprio contesto di transazione. ad esempio avvia la propria transazione ed esegue il commit o il rollback nel modo appropriato.

Se la proprietà ConnectionCommand imposta la connessione con un oggetto connessione esistente e la proprietà Transaction è impostata su TRUE, il caricamento bulk XML non genera rispettivamente un'istruzione COMMIT o ROLLBACK in caso di esito positivo o negativo. In presenza di un errore, il caricamento bulk XML restituisce il messaggio di errore appropriato. La decisione di eseguire un'istruzione COMMIT o ROLLBACK è delegata al client che ha avviato il caricamento bulk. L'oggetto connessione utilizzato per il caricamento bulk XML deve essere di tipo ICommand o essere un oggetto comando ADO.

In SQLXML 4.0 non è possibile utilizzare un Oggetto ConnectionObject con la proprietà Transaction impostata su FALSE. La modalità non transazionale non è supportata con un oggetto ConnectionObject perché non è possibile aprire più di un'interfaccia IRowsetFastLoad in una sessione passata.