Informazioni sulle operazioni di importazione ed esportazione bulk
SQL Server supporta l'esportazione bulk dei dati da una tabella di SQL Server e l'importazione bulk dei dati in una tabella o in una vista non partizionata di SQL Server. Sono disponibili le modalità di base seguenti.
Metodo |
Descrizione |
Importazione dei dati |
Esportazione dei dati |
---|---|---|---|
Utilità della riga di comando (Bcp.exe) che esegue l'esportazione e l'importazione bulk dei dati e genera file di formato. |
Sì |
Sì |
|
Istruzione Transact-SQL che importa i dati direttamente da un file di dati in una tabella di database o in una vista non partizionata. |
Sì |
No |
|
Istruzione Transact-SQL che utilizza il provider di set di righe con lettura bulk OPENROWSET per eseguire l'importazione bulk dei dati in una tabella di SQL Server specificando la funzione OPENROWSET(BULK…) per selezionare i dati in un'istruzione INSERT. |
Sì |
No |
Restrizioni
Le operazioni di importazione bulk di SQL Server non supportano l'importazione di dati da file con valori delimitati da virgole (CSV). Nei sistemi a 32 bit, tuttavia, è possibile importare dati CSV in una tabella di SQL Server senza operazioni di ottimizzazione dell'importazione bulk utilizzando OPENROWSET con il provider OLE DB per Jet. In Jet i file di testo vengono considerati tabelle il cui schema è definito dal file schema.ini, che si trova nella stessa directory dell'origine dati. Per i dati CSV, uno dei parametri nel file schema.ini sarà "FORMAT=CSVDelimited". Per utilizzare questa soluzione, è necessario acquisire familiarità con le operazioni di Jet Test IISAMm, ovvero la sintassi della relativa stringa di connessione, l'utilizzo del file schema.ini, le opzioni di impostazione del Registro di sistema e così via. Le fonti migliori per tali informazioni sono costituite dalla Guida di Microsoft Access e dagli articoli della Knowledge Base (KB). Per ulteriori informazioni, vedere Inizializzazione del driver per l'origine dati di testo, How To Use a SQL Server 7.0 Distributed Query with a Linked Server to Secured Access Databases, HOW TO: Use Jet OLE DB Provider 4.0 to Connect to ISAM Databases e How To Open Delimited Text Files Using the Jet Provider's Text.
Confronto tra operazioni in-process e out-of-process
L'istruzione BULK INSERT e la funzione OPENROWSET(BULK) vengono eseguite in-process con SQL Server e condividono lo stesso spazio degli indirizzi di memoria. Poiché i file di dati vengono aperti da un processo di SQL Server, i dati non vengono copiati tra il processo client e i processi di SQL Server. Per considerazioni sulla sicurezza quando si esegue l'importazione dei dati utilizzando BULK INSERT o INSERT ... SELECT * FROM OPENROWSET(BULK...), vedere Importazione di dati per operazioni bulk utilizzando BULK INSERT o OPENROWSET(BULK...).
L'utilità bcp viene invece eseguita out-of-process. Per spostare dati tra spazi di memoria dei processi, bcp deve utilizzare il marshalling dei dati interprocesso. Il marshalling dei dati interprocesso rappresenta il processo che consente di convertire in un flusso di byte i parametri di una chiamata al metodo. Tale processo può aggiungere un carico di lavoro notevole per il processore. Tuttavia, dato che bcp analizza e converte i dati in un formato di archiviazione nativo nel processo client, è possibile eseguire la ripartizione del carico di lavoro dell'analisi e della conversione dei dati dal processo di SQL Server. Se esiste un vincolo relativo alla CPU, è pertanto possibile ottenere prestazioni di importazione bulk migliori in un computer che dispone di più CPU o in computer diversi, utilizzando bcp anziché BULK INSERT o INSERT ... SELECT * FROM OPENROWSET(BULK).
File di formato
L'utilità bcp, BULK INSERT e INSERT ... SELECT * FROM OPENROWSET(BULK...) supportano l'utilizzo di un file di formato specializzato in cui archiviare informazioni relative al formato per ogni campo di un file di dati. Un file di formato può inoltre contenere informazioni sulla tabella di SQL Server corrispondente. Il file di formato può essere utilizzato per specificare tutte le informazioni sul formato necessarie per l'esportazione e l'importazione bulk dei dati da e verso un'istanza di SQL Server.
I file di formato costituiscono un modo flessibile per interpretare i dati così come presenti nel file di dati durante l'importazione, nonché per formattare i dati nel file di dati durante l'esportazione. Grazie a questa flessibilità, non è necessario scrivere codice specifico per interpretare i dati o riformattarli in base ai requisiti specifici di SQL Server o dell'applicazione esterna. Ad esempio, se si esegue l'esportazione bulk dei dati da caricare in un'applicazione che richiede valori separati da virgola, è possibile utilizzare un file di formato per inserire virgole come caratteri di terminazione del campo nei dati esportati.
SQL Server 2005 e versioni successive supportano due tipi di file di formato: XML e non XML. I file di formato non XML sono supportati dalle versioni precedenti di SQL Server. I file di formato XML hanno rappresentato una novità in SQL Server 2005.
L'utilità bcp è il solo strumento in grado di generare un file di formato. Per ulteriori informazioni, vedere Creazione di un file di formato. Per ulteriori informazioni sui file di formato, vedere File di formato per l'importazione o l'esportazione di dati.
Nota
Nei casi in cui un file di formato non viene fornito durante un'operazione di esportazione o importazione bulk, l'utente può scegliere di ignorare la formattazione predefinita nella riga di comando.
Query Processor e l'importazione bulk
Per eseguire l'importazione bulk dei dati in un'istanza di SQL Server, l'utilità bcp e le istruzioni BULK INSERT e INSERT ... SELECT * FROM OPENROWSET(BULK...) utilizzano tutte Query Processor.
Tutte e tre le modalità consentono di convertire i dati di un file di dati in set di righe OLE DB. Tuttavia la modalità di conversione varia, come segue:
L'utilità bcp legge il file di dati e invia un flusso TDS all'API del programma per la copia bulk (BCP) di SQL Server, che converte i dati in set di righe OLE DB.
BULK INSERT e il provider di set di righe con lettura bulk OPENROWSET convertono i dati del file direttamente in un set di righe OLE DB.
I set di righe OLE DB vengono inseriti nella tabella di destinazione da Query Processor, che pianifica e ottimizza ogni operazione.
Considerazioni sulle prestazioni
Anche l'impatto sulle prestazioni può essere significativo quando vengono importate grandi quantità di dati. In alcuni casi, è possibile migliorare le prestazioni modificando il modo in cui un'operazione di importazione o esportazione bulk gestisce uno o più degli elementi seguenti:
Parametri per i batch
Verifica dei vincoli CHECK
Modalità di registrazione delle operazioni bulk. Rilevante per i database che in genere utilizzano il modello di recupero con registrazione completa.
Ordinamento dei dati esportati
Importazione parallela di dati
Blocco tabella
Esecuzione dei trigger
Per ulteriori informazioni, vedere Ottimizzazione delle prestazioni dell'importazione bulk.
Nota
Per le operazioni di esportazione bulk non è disponibile alcuna tecnica di ottimizzazione specifica. Queste operazioni consentono di selezionare i dati dalla tabella di origine utilizzando un'istruzione SELECT.
Vedere anche