Condividi tramite


Importare dati da Excel a SQL Server o al database SQL di Azure

Si applica a:SQL ServerDatabase SQL di Azure

Sono disponibili vari modi per importare dati da file di Excel a SQL Server o al database SQL di Azure. Alcuni metodi consentono di importare dati in un unico passaggio direttamente dai file di Excel. Altri metodi richiedono l'esportazione dei dati di Excel in formato testo (file CSV) prima di poterli importare.

Questo articolo riepiloga i metodi usati di frequente e include collegamenti a informazioni più dettagliate. Una descrizione completa degli strumenti e dei servizi complessi come Azure Data Factory o SSIS esula dagli scopi di questo articolo. Per altre informazioni sulla soluzione a cui si è interessati, seguire i collegamenti indicati.

Elenco di metodi

Esistono vari modi per importare dati da Excel. Potrebbe essere necessario installare SQL Server Management Studio (SSMS) per usare alcuni di questi strumenti.

Per importare dati da Excel, è possibile usare gli strumenti seguenti:

Esportazione prima in formato testo (SQL Server e database SQL di Azure) Direttamente da Excel (solo SQL Server locale)
Procedura guidata Importa file flat Importazione/Esportazione guidata SQL Server
Istruzione BULK INSERT SQL Server Integration Services (SSIS)
Strumento di copia bulk (bcp) Funzione OPENROWSET
Copia guidata (Azure Data Factory)
Azure Data Factory

Se si vogliono importare più fogli di lavoro da una cartella di lavoro di Excel, è generalmente necessario eseguire uno di questi strumenti una volta per ogni foglio.

Per altre informazioni, vedere Limitazioni e problemi noti per il caricamento dei dati da o verso file di Excel.

Importazione/Esportazione guidata

Importare i dati direttamente dai file di Excel usando Importazione/Esportazione guidata SQL Server. È anche possibile salvare le impostazioni come pacchetto di SQL Server Integration Services (SSIS) che è possibile personalizzare e riusare in seguito.

  1. In SQL Server Management Studio connettersi a un'istanza del motore di database di SQL Server.

  2. Espandere Database.

  3. Fare clic con il pulsante destro del mouse su un database.

  4. Seleziona Tasks.

  5. Scegliere l'opzione Importa dati o Esporta dati:

    Screenshot della procedura guidata di avvio di SSMS.

Verrà avviata la procedura guidata:

Screenshot di Connetti a un'origine dati Excel.

Per altre informazioni, vedere gli articoli seguenti:

Integration Services (SSIS)

Se si ha familiarità con SQL Server Integration Services (SSIS) e si preferisce non eseguire l'Importazione/Esportazione guidata di SQL Server, è possibile creare un pacchetto SSIS che usi invece Excel come origine e SQL Server come destinazione nel flusso di dati.

Per altre informazioni, vedere gli articoli seguenti:

Per istruzioni su come creare pacchetti SSIS, vedere l'esercitazione Creazione di un pacchetto ETL.

Screenshot dei componenti nel flusso di dati.

OPENROWSET e server collegati

Importante

Nel database SQL di Azure non è possibile eseguire l'importazione direttamente da Excel. È necessario prima di tutto esportare i dati in un file di testo (CSV).

Gli esempi seguenti usano il provider JET, perché il provider ACE incluso in Office che si connette alle origini dati di Excel è destinato all'uso lato client interattivo.

Query distribuite

Importare i dati direttamente in SQL Server dai file di Excel usando la funzione OPENROWSET o OPENDATASOURCE di Transact-SQL. Questo utilizzo è noto come query distribuita.

Importante

Nel database SQL di Azure non è possibile eseguire l'importazione direttamente da Excel. È necessario prima di tutto esportare i dati in un file di testo (CSV).

Prima di eseguire una query distribuita, è necessario abilitare l'opzione di configurazione del server Ad Hoc Distributed Queries, come illustrato nell'esempio seguente. Per ulteriori informazioni, vedere Configurazione del server: query distribuite ad hoc.

sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO

L'esempio di codice seguente usa OPENROWSET per importare i dati dal foglio di lavoro di Excel Sheet1 in una nuova tabella di database.

USE ImportFromExcel;
GO
SELECT * INTO Data_dq
FROM OPENROWSET('Microsoft.JET.OLEDB.4.0',
    'Excel 8.0; Database=C:\Temp\Data.xls', [Sheet1$]);
GO

Ecco lo stesso esempio con OPENDATASOURCE.

USE ImportFromExcel;
GO
SELECT * INTO Data_dq
FROM OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',
    'Data Source=C:\Temp\Data.xls;Extended Properties=Excel 8.0')...[Sheet1$];
GO

Per aggiungere i dati importati a una tabella esistente invece di creare una nuova tabella, usare la sintassi INSERT INTO ... SELECT ... FROM ... al posto della sintassi SELECT ... INTO ... FROM ... usata negli esempi precedenti.

Per eseguire una query sui dati di Excel senza eseguirne l'importazione, usare la sintassi standard SELECT ... FROM ....

Per altre informazioni sulle query distribuite, vedi gli articoli seguenti:

1 Le query distribuite sono ancora supportate in SQL Server, ma la documentazione relativa a questa funzionalità non è stata aggiornata.

Server collegati

È anche possibile configurare una connessione permanente da SQL Server al file di Excel come server collegato. L'esempio seguente importa i dati dal foglio di lavoro Data nel server collegato di Excel esistente EXCELLINK in una nuova tabella di database di SQL Server denominata Data_ls.

USE ImportFromExcel;
GO
SELECT * INTO Data_ls FROM EXCELLINK...[Data$];
GO

È possibile creare un server collegato da SQL Server Management Studio (SSMS) o eseguendo la stored procedure di sistema sp_addlinkedserver, come illustrato nell'esempio seguente.

DECLARE @RC INT;
DECLARE @server NVARCHAR(128);
DECLARE @srvproduct NVARCHAR(128);
DECLARE @provider NVARCHAR(128);
DECLARE @datasrc NVARCHAR(4000);
DECLARE @location NVARCHAR(4000);
DECLARE @provstr NVARCHAR(4000);
DECLARE @catalog NVARCHAR(128);

-- Set parameter values
SET @server = 'EXCELLINK';
SET @srvproduct = 'Excel';
SET @provider = 'Microsoft.JET.OLEDB.4.0';
SET @datasrc = 'C:\Temp\Data.xls';
SET @provstr = 'Excel 8.0';

EXEC @RC = [master].[dbo].[sp_addlinkedserver] @server,
    @srvproduct,
    @provider,
    @datasrc,
    @location,
    @provstr,
    @catalog;

Per altre informazioni sui server collegati, vedi gli articoli seguenti:

Per altri esempi e informazioni sia sui server collegati che sulle query distribuite, vedi l’articolo seguente:

Prerequisiti

Per usare i restanti metodi descritti in questa pagina, ovvero l'istruzione BULK INSERT, lo strumento bcp o Azure Data Factory, è prima di tutto necessario esportare i dati di Excel in un file di testo.

Salvare i dati di Excel come testo

In Excel selezionare File | Salva con nome e quindi selezionare Testo (delimitato da tabulazioni) (*.txt) o CSV (delimitato da virgole) (*.csv) come tipo di file di destinazione.

Se vuoi esportare più fogli di lavoro dalla cartella di lavoro, seleziona ogni foglio e ripeti questa procedura. Il comando Salva con nome esporta solo il foglio attivo.

Suggerimento

Per ottenere risultati ottimali con gli strumenti per l'importazione dei dati, salvare fogli che contengono solo le intestazioni di colonna e le righe di dati. Se i dati salvati contengono titoli di pagina, righe vuote, note e così via, possono verificarsi risultati imprevisti in un secondo momento quando si importano i dati.

Procedura guidata Importa file flat

È possibile importare i dati salvati come file di testo seguendo le varie pagine della procedura guidata Importa file flat.

Come descritto in precedenza nella sezione Prerequisiti, è necessario esportare i dati Excel come testo prima di poter usare la procedura guidata Importa file flat per eseguire l'importazione.

Per altre informazioni sulla procedura guidata Importa File Flat, vedere Procedura guidata per l'importazione di file flat in SQL.

Comando BULK INSERT

BULK INSERT è un comando Transact-SQL che è possibile eseguire da SQL Server Management Studio. L'esempio seguente carica i dati dal file con valori delimitati da virgole Data.csv in una tabella di database esistente.

Come descritto in precedenza nella sezione Prerequisiti, è necessario esportare i dati Excel come testo prima di usare BULK INSERT per eseguire l'importazione. BULK INSERT non legge direttamente i file di Excel. Con il comando BULK INSERT, è possibile importare un file CSV archiviato localmente o in Archiviazione BLOB di Azure.

USE ImportFromExcel;
GO
BULK INSERT Data_bi FROM 'C:\Temp\data.csv'
   WITH (
      FIELDTERMINATOR = ',',
      ROWTERMINATOR = '\n'
);
GO

Per altre informazioni ed esempi per SQL Server e il database SQL di Azure, vedi gli articoli seguenti:

Strumento di copia bulk (bcp)

Lo strumento bcp viene eseguito dal prompt dei comandi. L'esempio seguente carica i dati dal file con valori delimitati da virgole Data.csv nella tabella di database Data_bcp esistente.

Come descritto in precedenza nella sezione Prerequisiti, è necessario esportare i dati Excel come testo prima di usare bcp per eseguire l'importazione. Lo strumento bcp non può leggere direttamente i file Excel. Usarlo per eseguire l'importazione in SQL Server o nel database SQL da un file di testo (CSV) salvato nella risorsa di archiviazione locale.

Importante

Per un file di testo (CSV) archiviato in Archiviazione BLOB di Azure, usare BULK INSERT o OPENROWSET. Per un esempio, vedere Usare BULK INSERT o OPENROWSET(BULK...) per importare dati in SQL Server.

bcp.exe ImportFromExcel..Data_bcp in "C:\Temp\data.csv" -T -c -t ,

Per altre informazioni su bcp, vedere i seguenti articoli:

Copia guidata (ADF)

È possibile importare i dati salvati come file di testo seguendo le varie pagine della Copia guidata di Azure Data Factory (ADF).

Come descritto in precedenza nella sezione Prerequisiti, è necessario esportare i dati Excel come testo prima di usare Azure Data Factory per eseguire l'importazione. Azure Data Factory non legge direttamente i file di Excel.

Per altre informazioni sulla Copia guidata, vedi i seguenti articoli:

Azure Data Factory

Se si ha familiarità con Azure Data Factory e si preferisce non eseguire la Copia guidata, creare una pipeline con un'attività di copia dal file di testo a SQL Server o al database SQL di Azure.

Come descritto in precedenza nella sezione Prerequisiti, è necessario esportare i dati Excel come testo prima di usare Azure Data Factory per eseguire l'importazione. Azure Data Factory non legge direttamente i file di Excel.

Per altre informazioni sull'uso di questi sink e origini di Data Factory, vedi gli articoli seguenti:

Per istruzioni su come copiare dati con Azure Data Factory, vedi gli articoli seguenti: