Preparare i dati per l'importazione o l'esportazione bulk

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsPiattaforma di sistemi analitici (PDW)

In questa sezione vengono illustrati i fattori da considerare nella pianificazione di operazioni di esportazione bulk, nonché i requisiti per le operazioni di importazione bulk.

Nota

In caso di dubbi riguardo alla formattazione da applicare a un file di dati per l'importazione in blocco, usa l'utilità bcp per esportare i dati dalla tabella in un file di dati. La formattazione applicata a ogni campo dati di questo file indica la formattazione necessaria per l'importazione bulk dei dati nella colonna della tabella corrispondente. Usare la stessa formattazione per i campi del file di dati da importare.

Considerazioni sul formato dei file di dati per l'esportazione in massa

Prima di eseguire un'operazione di esportazione in blocco usando il comando bcp , tenere presente quanto segue:

  • Quando si esportano dati in un file, il comando bcp crea automaticamente il file di dati utilizzando il nome di file specificato. Se tale nome è già usato, il contenuto esistente del file di dati verrà sovrascritto con i dati di cui si intende eseguire la copia bulk.

  • Per eseguire l'esportazione in massa da una tabella o da una vista in un file di dati, è necessario disporre dell'autorizzazione SELECT per la tabella o la vista da copiare.

  • SQL Server può usare analisi parallele per recuperare i dati. Pertanto in generale non c'è nessuna garanzia che le righe della tabella di cui si esegue l'esportazione in massa da un'istanza di SQL Server siano riportate in un determinato ordine nel file di dati. Per far sì che le righe della tabella siano disposte in un ordine specifico nel file di dati, usa l'opzione queryout per eseguire l'esportazione in massa da una query e specificare una clausola ORDER BY.

Requisiti relativi al formato dei file di dati per l'importazione in blocco

Per importare dati da un file di dati, il file deve soddisfare i requisiti di base seguenti:

  • È necessario che i dati siano disposti in righe e colonne.

Nota

Non è necessario che la struttura del file di dati corrisponda esattamente alla struttura della tabella di SQL Server, in quanto è possibile ignorare o riordinare le colonne durante il processo di importazione in blocco.

  • È necessario che il file di dati sia in un formato supportato, ad esempio carattere o nativo.

  • Per i dati è possibile usare il formato carattere o binario nativo, incluso Unicode.

  • Per importare dati usando un comando bcp, un'istruzione BULK INSERT o un'istruzione INSERT ... SELECT * FROM OPENROWSET(BULK...), è necessario che la tabella di destinazione sia già presente.

  • È necessario che ogni campo del file di dati sia compatibile con la colonna corrispondente della tabella di destinazione. Non è ad esempio possibile caricare un campo int in una colonna datetime . Per altre informazioni, vedi Formati di dati per l'importazione o l'esportazione in blocco (SQL Server) e Specificare i formati di dati per la compatibilità con bcp (SQL Server).

    Nota

    Per specificare un subset di righe da importare da un file di dati invece dell'intero file, è possibile usare un comando bcp con l'opzione -F <first_row> e/o l'opzione -L <last_row>. Per altre informazioni, vedere bcp Utility.

  • Per importare dati da file di dati con campi a lunghezza o a larghezza fissa, usare un file di formato. Per altre informazioni, vedere File in formato XML (SQL Server).

  • A partire da SQL Server 2017 (14.x), è possibile usare un file CSV come file di dati per un'importazione in blocco di dati in SQL Server. Il carattere di terminazione del campo di un file CSV non può essere una virgola. Per poter essere usato come file di dati per l'importazione bulk, un file CSV deve essere conforme alle restrizioni seguenti:

    • I campi dati non possono mai contenere il carattere di terminazione del campo.

    • Nessuno o tutti i valori in un campo dati sono racchiusi tra virgolette ("").

      Per importare in blocco i dati da un file di tabella di Microsoft FoxPro o Visual FoxPro (con estensione dbf) o da un foglio di lavoro di Microsoft Excel (con estensione xls), è necessario convertire i dati in un file CSV conforme alle restrizioni precedenti. L'estensione del file è in genere .csv. È quindi possibile usare il file con estensione .csv come file di dati in un'operazione di importazione in blocco di SQL Server.

      Nei sistemi a 32 bit (SQL Server 2014 (12.x) e versioni precedenti) è possibile importare dati CSV in una tabella di SQL Server senza operazioni di ottimizzazione dell'importazione in blocco usando 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 usare questa soluzione è necessario acquisire familiarità con il funzionamento di Jet Text IISAM, ovvero con la sintassi della relativa stringa di connessione, l'uso 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 altre informazioni, vedere Inizializzazione del driver origine dati di testo, Come usare una query distribuita di SQL Server 7.0 con un server collegato a database di Access protetti, PROCEDURA: Usare il provider OLE DB Jet 4.0 per la connessione a database ISAMe Come aprire file di testo delimitati mediante IIsam di testo del provider Jet.

Per l'importazione in blocco di dati da un file a una tabella sono previsti i requisiti seguenti:

  • Gli utenti devono disporre delle autorizzazioni INSERT e SELECT per la tabella, nonché dell'autorizzazione ALTER TABLE quando usano opzioni che prevedono operazioni DDL (Data Definition Language), quali la disabilitazione di vincoli.

  • Quando importano dati in blocco tramite BULK INSERT o INSERT ... SELECT * FROM OPENROWSET(BULK...), il file di dati deve risultare accessibile per le operazioni di lettura eseguite dal profilo di sicurezza del processo di SQL Server (se l'utente esegue l'accesso usando l'account di accesso di SQL Server disponibile) oppure dall'account di accesso di Microsoft Windows usato con delega della sicurezza. Per leggere il file, l'utente deve inoltre disporre dell'autorizzazione ADMINISTER BULK OPERATIONS.

Nota

L'importazione bulk in una vista partizionata non è supportata e avrà pertanto esito negativo.