Condividi tramite


Introduzione al caricamento di massa 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 di SQL Server usando un'istruzione INSERT e la funzione OPENXML; Tuttavia, l'utilità Caricamento bulk offre prestazioni migliori quando è necessario inserire grandi quantità di dati XML.

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

  • Schema XSD (XML Schema Definition) con annotazioni o XML-Data schema ridotto (XDR). L'utilità di caricamento bulk XML interpreta questo schema di mapping e le annotazioni specificate nello schema per identificare le tabelle di SQL Server in cui inserire i dati XML.

  • Un documento XML o un frammento di documento (un frammento di documento è un documento senza un singolo elemento di primo livello). È possibile specificare un nome di file o un flusso da cui è possibile leggere il caricamento bulk XML.

Il caricamento bulk XML interpreta lo schema di mapping e identifica le tabelle in cui inserire i dati XML.

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

Streaming di dati XML

Poiché il documento XML di origine può essere di grandi dimensioni, l'intero documento non viene letto in memoria per l'elaborazione del caricamento bulk. Il caricamento bulk XML interpreta invece i dati XML come flusso e lo 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. Allo stesso modo, quando legge l'elemento <Order> , il caricamento bulk XML genera un record per la tabella Ordertable e quindi lo inserisce nella tabella di SQL Server durante la lettura del <tag di fine /Order> .

Operazioni di caricamento bulk XML transazionate e non transazioni

Il caricamento bulk XML può funzionare in una modalità transazionata o non transazionata. 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 in cui i dati vengono caricati in blocco sono vuoti senza indici.

  • Le tabelle hanno dati e indici univoci.

L'approccio non transazionato non garantisce un rollback se si verifica un errore nel processo di caricamento bulk (anche se possono verificarsi rollback parziali). Il caricamento bulk non transazionato è appropriato quando il database è vuoto. Pertanto, se si verifica un errore, è possibile pulire il database e riavviare il caricamento bulk XML.

Annotazioni

In modalità non transazionale, il caricamento bulk XML usa una transazione interna predefinita ed esegue il commit. Quando la proprietà Transaction è impostata su TRUE, il caricamento bulk XML non chiama commit su 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 di SQL Server usato con il caricamento bulk XML abbia accesso a questo percorso. Se la proprietà TempFilePath non è specificata, 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 usa 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 opera nel proprio contesto di transazione. Ad esempio, il caricamento bulk XML avvia la propria transazione e esegue il commit o il rollback in base alle esigenze.

Se la proprietà ConnectionCommand imposta la connessione con un oggetto connessione esistente e la proprietà Transaction è impostata su TRUE, il caricamento bulk XML non esegue rispettivamente un'istruzione COMMIT o ROLLBACK in caso di esito positivo o negativo. Se si verifica un errore, il caricamento bulk XML restituisce il messaggio di errore appropriato. La decisione di emettere un'istruzione COMMIT o ROLLBACK viene lasciata 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 ConnectionObject perché non è possibile aprire più interfacce IRowsetFastLoad in una sessione passata.