DetailPage-MSS-KB

Microsoft Knowledge Base

Identificativo articolo: 321686 - Ultima modifica: sabato 8 febbraio 2014 - Revisione: 9.0

 

In questa pagina

Sommario

In questo articolo viene illustrato come importare dati da fogli di lavoro Microsoft Excel in database di Microsoft SQL Server utilizzando vari metodi.

Descrizione della tecnica

Negli esempi di questo articolo i dati di Excel vengono importati utilizzando:
  • SQL Server Data Transformation Services (DTS)
  • Microsoft SQL Server 2005 Integration Services (SSIS)
  • Server SQL Server collegati
  • Query distribuite di SQL Server
  • ActiveX Data Objects (ADO) e il Provider Microsoft OLE DB per SQL Server
  • ADO e il Provider Microsoft OLE DB per Jet 4.0

Requisiti

Il seguente elenco descrive l'hardware consigliato, i software, l'infrastruttura di rete e i Service Pack necessari:
  • Disponibilità di un'istanza di Microsoft SQL Server 7.0 o Microsoft SQL Server 2000 o Microsoft SQL Server 2005
  • Microsoft Visual Basic 6.0 per gli esempi di ADO che utilizzano Visual Basic
Parti di questo articolo presuppongono che si abbia familiarità con i seguenti argomenti:
  • Data Transformation Services
  • I server collegati e le query distribuite
  • Sviluppo di ADO in Visual Basic

Esempi

Import oppure Append

Le istruzioni SQL di esempio utilizzate in questo articolo illustrano le query Create Table che importano dati di Excel in una nuova tabella di SQL Server utilizzando l'istruzione SELECT...INTO...FROM... . È possibile convertire queste istruzioni per query di Accodamento utilizzando INSERT INTO...SELECT...DALLA sintassi mentre si continua a fare riferimento gli oggetti di origine e di destinazione, come illustrato in questi esempi di codice.

Utilizzo DTS o SSIS

È possibile utilizzare l'importazione guidata di SQL Server Data Transformation Services (DTS) o di SQL Server importazione/esportazione guidata per importare dati di Excel in tabelle di SQL Server. Quando si esegue la procedura guidata e si selezionano le tabelle di origine di Excel, tenere presente che i nomi di oggetti di Excel che vengono seguiti dal dollaro ($) rappresentano i fogli di lavoro (ad esempio, Sheet1$), e che i nomi degli oggetti normale senza il simbolo del dollaro rappresentano intervalli denominati di Excel.

Utilizzare un server collegato

Per semplificare la query, è possibile configurare una cartella di lavoro di Excel come server collegato in SQL Server.Per ulteriori informazioni, fare clic sul numero dell'articolo per visualizzare l'articolo della Microsoft Knowledge Base:
306397  (http://support.microsoft.com/kb/306397/EN-US/ ) PROCEDURA: utilizzo di Excel con server collegati SQL Server e query distribuite
Il codice riportato di seguito consente di importare i dati dal foglio di lavoro dei clienti nel server collegato Excel "EXCELLINK" in una nuova tabella di SQL Server denominato XLImport1:
SELECT * INTO XLImport1 FROM EXCELLINK...[Customers$]
				
È inoltre possibile eseguire la query sull'origine in modalità passthrough utilizzando OPENQUERY come segue:
SELECT * INTO XLImport2 FROM OPENQUERY(EXCELLINK,
    'SELECT * FROM [Customers$]')
				

Utilizzare le query distribuite

Se non si desidera configurare una connessione permanente per la cartella di lavoro di Excel come un server collegato, è possibile importare i dati per uno scopo specifico utilizzando il OPENDATASOURCE o la funzione OPENROWSET. Gli esempi di codice seguenti consentono di importare anche i dati dal foglio di lavoro Excel clienti in nuove tabelle di SQL Server:
SELECT * INTO XLImport3 FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\test\xltest.xls;Extended Properties=Excel 8.0')...[Customers$]

SELECT * INTO XLImport4 FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\test\xltest.xls', [Customers$])

SELECT * INTO XLImport5 FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\test\xltest.xls', 'SELECT * FROM [Customers$]')
				

Utilizzo di ADO e SQLOLEDB

Quando si è connessi a SQL Server in un'applicazione ADO utilizzando Microsoft OLE DB per SQL Server (SQLOLEDB), è possibile utilizzare la stessa sintassi "query distribuite" dal Utilizzo delle query distribuite sezione per importare dati di Excel in SQL Server.

Nell'esempio di codice di Visual Basic 6.0 è necessario aggiungere un riferimento a Microsoft ActiveX Data Objects (ADO). In questo esempio di codice viene inoltre illustrato come utilizzare OPENDATASOURCE e OPENROWSET tramite una connessione SQLOLEDB.
    Dim cn As ADODB.Connection
    Dim strSQL As String
    Dim lngRecsAff As Long
    Set cn = New ADODB.Connection
    cn.Open "Provider=SQLOLEDB;Data Source=<server>;" & _
        "Initial Catalog=<database>;User ID=<user>;Password=<password>"

    'Import by using OPENDATASOURCE.
    strSQL = "SELECT * INTO XLImport6 FROM " & _
        "OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', " & _
        "'Data Source=C:\test\xltest.xls;" & _
        "Extended Properties=Excel 8.0')...[Customers$]"
    Debug.Print strSQL
    cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
    Debug.Print "Records affected: " & lngRecsAff

    'Import by using OPENROWSET and object name.
    strSQL = "SELECT * INTO XLImport7 FROM " & _
        "OPENROWSET('Microsoft.Jet.OLEDB.4.0', " & _
        "'Excel 8.0;Database=C:\test\xltest.xls', " & _
        "[Customers$])"
    Debug.Print strSQL
    cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
    Debug.Print "Records affected: " & lngRecsAff

    'Import by using OPENROWSET and SELECT query.
    strSQL = "SELECT * INTO XLImport8 FROM " & _
        "OPENROWSET('Microsoft.Jet.OLEDB.4.0', " & _
        "'Excel 8.0;Database=C:\test\xltest.xls', " & _
        "'SELECT * FROM [Customers$]')"
    Debug.Print strSQL
    cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
    Debug.Print "Records affected: " & lngRecsAff

    cn.Close
    Set cn = Nothing
				

Utilizzo di ADO e il Provider Jet

L'esempio nella sezione precedente utilizza ADO con il Provider SQLOLEDB per connettersi alla destinazione dell'importazione da Excel a SQL. È anche possibile utilizzare il Provider OLE DB per Jet 4.0 per la connessione all'origine di Excel.

Il motore di database Jet può fare riferimento a database esterni nelle istruzioni SQL utilizzando una sintassi speciale che dispone di tre diversi formati:
  • [Percorso completo del database di Microsoft Access].[Nome della tabella]
  • [Nome ISAM;Stringa di connessione ISAM].[Nome della tabella]
  • [ODBC;Stringa di connessione ODBC].[Nome della tabella]
In questa sezione utilizza il formato di terzo per creare una connessione ODBC al database di SQL Server di destinazione. È possibile utilizzare un nome di origine dati ODBC (DSN) o una stringa di connessione senza DSN:
DSN:
    [odbc;DSN=<DSN name>;UID=<user>;PWD=<password>]

DSN-less:
   [odbc;Driver={SQL Server};Server=<server>;Database=<database>;
       UID=<user>;PWD=<password>]
				
Nell'esempio di codice Visual Basic 6.0 è necessario aggiungere un riferimento di progetto ad ADO. In questo esempio di codice viene illustrato come importare dati di Excel a SQL Server tramite una connessione ADO utilizzando il Provider Jet 4.0.
    Dim cn As ADODB.Connection
    Dim strSQL As String
    Dim lngRecsAff As Long
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=C:\test\xltestt.xls;" & _
        "Extended Properties=Excel 8.0"
    
    'Import by using Jet Provider.
    strSQL = "SELECT * INTO [odbc;Driver={SQL Server};" & _
        "Server=<server>;Database=<database>;" & _
        "UID=<user>;PWD=<password>].XLImport9 " & _
        "FROM [Customers$]"
    Debug.Print strSQL
    cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
    Debug.Print "Records affected: " & lngRecsAff
        
    cn.Close
    Set cn = Nothing
				
È inoltre possibile utilizzare questa sintassi, il Provider Jet supporta, per importare dati di Excel in altri database di Microsoft Access, un database di accesso sequenziale indicizzato (ISAM) del metodo ("desktop") o un database ODBC.

Risoluzione dei problemi

  • Tenere presente che i nomi di oggetti di Excel che sono seguiti dal simbolo del dollaro ($) rappresentano i fogli di lavoro (ad esempio, Sheet1$) e che i nomi degli oggetti semplici rappresentano gli intervalli denominati di Excel.
  • In alcune circostanze, soprattutto quando è possibile designare l'origine dati di Excel utilizzando il nome della tabella anziché una query di selezione, le colonne della tabella di SQL Server di destinazione sono organizzate in ordine alfabetico.Per ulteriori informazioni su questo problema con il Provider Jet, fare clic sul numero dell'articolo per visualizzare l'articolo della Microsoft Knowledge Base:
    299484  (http://support.microsoft.com/kb/299484/EN-US/ ) PRB: Colonne vengono ordinate alfabeticamente quando si utilizza ADOX per recuperare le colonne della tabella di Access
  • Quando il Provider Jet determina che una colonna di Excel contiene dati numerici e testo misto, il Provider Jet consente di selezionare il tipo di dati "maggioranza" e restituisce valori non corrispondenti come valori null.Per ulteriori informazioni su come ovviare a questo problema, fare clic sul numero dell'articolo per visualizzare l'articolo della Microsoft Knowledge Base:
    194124  (http://support.microsoft.com/kb/194124/EN-US/ ) PRB: Excel restituiti valori NULL tramite DAO OpenRecordset

Riferimenti

Per ulteriori informazioni su come utilizzare Excel come origine dati, fare clic sul numero dell'articolo per visualizzare l'articolo della Microsoft Knowledge Base:
257819  (http://support.microsoft.com/kb/257819/EN-US/ ) HOWTO: Utilizzare ADO con dati di Excel da Visual Basic o VBA
Per ulteriori informazioni su come trasferire i dati in Excel, fare clic sui numeri degli articoli della Microsoft Knowledge Base:
295646  (http://support.microsoft.com/kb/295646/EN-US/ ) HOWTO: Trasferimento di dati dall'origine dati ADO in Excel con ADO
247412  (http://support.microsoft.com/kb/247412/EN-US/ ) INFO: Metodi per il trasferimento di dati in Excel da Visual Basic
246335  (http://support.microsoft.com/kb/246335/EN-US/ ) HOWTO: Trasferimento di dati da un Recordset ADO a Excel con automazione
319951  (http://support.microsoft.com/kb/319951/EN-US/ ) Procedura: Trasferire dati in Excel utilizzando SQL Server Data Transformation Services
306125  (http://support.microsoft.com/kb/306125/EN-US/ ) Procedura: Importare dati da SQL Server in Microsoft Excel

Le informazioni in questo articolo si applicano a:
  • Microsoft Excel 2000 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 64-bit Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Chiavi: 
kbhowtomaster kbjet kbmt KB321686 KbMtit
Traduzione automatica articoliTraduzione automatica articoli
IMPORTANTE: il presente articolo è stato tradotto tramite un software di traduzione automatica di Microsoft ed eventualmente revisionato dalla community Microsoft tramite la tecnologia CTF (Community Translation Framework) o da un traduttore professionista. Microsoft offre articoli tradotti manualmente e altri tradotti automaticamente e rivisti dalla community con l’obiettivo di consentire all'utente di accedere a tutti gli articoli della Knowledge Base nella propria lingua. Tuttavia, un articolo tradotto automaticamente, anche se rivisto dalla community, non sempre è perfetto. Potrebbe contenere errori di vocabolario, di sintassi o di grammatica. Microsoft declina ogni responsabilità per imprecisioni, errori o danni causati da una traduzione sbagliata o dal relativo utilizzo da parte dei clienti. Microsoft aggiorna frequentemente il software e gli strumenti di traduzione automatica per continuare a migliorare la qualità della traduzione.
Clicca qui per visualizzare la versione originale in inglese dell’articolo: 321686  (http://support.microsoft.com/kb/321686/en-us/ )
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Condividi
Altre opzioni per il supporto
Forum del supporto di Microsoft Community
Contattaci direttamente
Ricerca di un partner certificato Microsoft
Microsoft Store