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) 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)
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.

Importante

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:

    Start wizard SSMS

Verrà avviata la procedura guidata:

Connect to an Excel data source

Per altre informazioni, vedere:

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, creare un pacchetto SSIS che usa Excel come origine e SQL Server come destinazione nel flusso di dati.

Per altre informazioni, vedere:

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

Components in the data flow

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).

Nota

Il provider ACE (in precedenza provider Jet) che si connette alle origini dati di Excel è destinato all'uso interattivo sul lato client. Se si usa il provider ACE in SQL Server, in particolare in processi automatizzati o processi in esecuzione in parallelo, si possono ottenere risultati imprevisti.

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 altre informazioni, vedere Opzione di configurazione del server ad hoc distributed queries.

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.ACE.OLEDB.12.0',
    'Excel 12.0; Database=C:\Temp\Data.xlsx', [Sheet1$]);
GO

Ecco lo stesso esempio con OPENDATASOURCE.

USE ImportFromExcel;
GO
SELECT * INTO Data_dq
FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
    'Data Source=C:\Temp\Data.xlsx;Extended Properties=Excel 12.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:

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.ACE.OLEDB.12.0';
SET @datasrc = 'C:\Temp\Data.xlsx';
SET @provstr = 'Excel 12.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:

Prerequisito - Salvare i dati di Excel come testo

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.

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 Prerequisito, è 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 Prerequisito, è necessario esportare i dati Excel come testo prima di usare l'istruzione BULK INSERT per eseguire l'importazione. L'istruzione 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 BCP

BCP è un programma eseguibile 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 Prerequisito, è necessario esportare i dati Excel come testo prima di usare BCP per eseguire l'importazione. BCP non legge direttamente i file di 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 alcuni esempi, vedere Esempi.

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

Per altre informazioni su BCP, vedi 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 Prerequisito, è 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 Prerequisito, è 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:

Errori comuni

Microsoft.ACE.OLEDB.12.0" non è stato registrato

Questo errore si verifica perché non è installato il provider OLE DB. Installarlo da Microsoft Access motore di database 2016 Redistributable. Assicurarsi di installare la versione a 64 bit se Windows e SQL Server sono entrambi a 64 bit.

Testo dell'errore completo:

Msg 7403, Level 16, State 1, Line 3
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" has not been registered.

Impossibile creare un'istanza del provider OLE DB "Microsoft.ACE.OLEDB.12.0" per il server collegato "(null)"

Indica che Microsoft OLE DB non è stato configurato correttamente. Eseguire il codice Transact-SQL seguente per risolvere il problema:

EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1;
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1;

Testo dell'errore completo:

Msg 7302, Level 16, State 1, Line 3
Cannot create an instance of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

Impossibile caricare il provider OLE DB a 32 bit "Microsoft.ACE.OLEDB.12.0" in-process in SQL Server a 64 bit

Ciò si verifica quando si installa una versione a 32 bit del provider OLE DB con SQL Server a 64 bit. Per risolvere questo problema, disinstallare la versione a 32 bit e installare la versione a 64 bit del provider OLE DB.

Testo dell'errore completo:

Msg 7438, Level 16, State 1, Line 3
The 32-bit OLE DB provider "Microsoft.ACE.OLEDB.12.0" cannot be loaded in-process on a 64-bit SQL Server.

Il provider OLE DB "Microsoft.ACE.OLEDB.12.0" per il server collegato "(null)" ha segnalato un errore.

Impossibile inizializzare l'oggetto origine dei dati del provider OLE DB "Microsoft.ACE.OLEDB.12.0" per il server collegato "(null)"

Entrambi questi errori indicano in genere un problema di autorizzazione tra il processo di SQL Server e il file. Verificare che l'account che esegue il servizio SQL Server abbia l'autorizzazione di accesso completo al file. È consigliabile evitare di cercare di importare i file dal desktop.

Testo degli errori completo:

Msg 7399, Level 16, State 1, Line 3
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7303, Level 16, State 1, Line 3
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

Passaggi successivi