Condividi tramite


Introduzione al caricamento bulk XML (SQLXML 4.0)

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

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

Il metodo Execute del modello a oggetti per il 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 l'utente abbia familiarità con le caratteristiche 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. Durante la lettura dei dati, l'utilità identifica le tabelle di database, genera i record appropriati dall'origine dati XML, quindi invia i record a SQL Server per l'inserimento.

Il documento di origine XML seguente è costituito, ad esempio, da elementi <Customer> e da elementi figlio <Order>:

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

Durante la lettura dell'elemento <Customer>, il caricamento bulk XML genera un record per la tabella Customer. Quando legge il tag di fine </Customer>, inserisce il record nella tabella in SQL Server. Analogamente, quando legge l'elemento <Order>, genera un record per la tabella Order e quindi inserisce il record nella tabella di 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 un caricamento bulk in una modalità non transazionale, ovvero la proprietà Transaction è impostata su FALSE, e si verifica una delle condizioni seguenti:

  • 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 esegue il commit di 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 tali record dai file e li archivia nelle tabelle corrispondenti. È possibile specificare il percorso di questi file temporanei utilizzando la proprietà TempFilePath. In questo caso, è necessario assicurarsi che l'account di SQL Server utilizzato con il caricamento bulk XML disponga di accesso a tale percorso. Se non si specifica la proprietà TempFilePath, viene utilizzato il percorso 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 eseguire il caricamento bulk dei dati.

Se la proprietà ConnectionString imposta la stringa di connessione e la proprietà Transaction è impostata su TRUE, il caricamento bulk XML agisce 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 a un oggetto connessione esistente e la proprietà Transaction è impostata su TRUE, il caricamento bulk XML non esegue un'istruzione COMMIT o ROLLBACK in caso di esito positivo o negativo, rispettivamente. 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 deve essere un oggetto comando ADO.

In SQLXML 4.0 non è possibile utilizzare ConnectionObject con la proprietà Transaction impostata su FALSE. La modalità non transazionale non è supportata con ConnectionObject perché è impossibile aprire più interfacce IRowsetFastLoad in una sessione passata.