Αναγν. άρθρου: 321686 - Τελευταία αναθεώρηση: Σάββατο, 17 Σεπτεμβρίου 2011 - Αναθεώρηση: 7.0

Τρόπος εισαγωγής δεδομένων από το Excel με SQL Server

Συμβουλή συστήματοςΑυτό το άρθρο ισχύει για διαφορετικό λειτουργικό σύστημα από αυτό που χρησιμοποιείτε. Το περιεχόμενο του άρθρου που ενδέχεται να μην σας αφορά έχει απενεργοποιηθεί.

Σε αυτήν τη σελίδα

Ανάπτυξη όλων | Σύμπτυξη όλων

Περίληψη

Αυτό το άρθρο βήμα προς βήμα περιγράφει τον τρόπο για να εισαγάγετε δεδομένα από φύλλα εργασίας του Microsoft Excel σε βάσεις δεδομένων Microsoft SQL Server, χρησιμοποιώντας μια ποικιλία μεθόδων.

Περιγραφή της τεχνικής

Τα δείγματα σε αυτό το άρθρο εισαγωγή δεδομένων του Excel χρησιμοποιώντας:
  • Υπηρεσίες μετασχηματισμού δεδομένων SQL Server (DTS)
  • Microsoft SQL Server 2005 Integration Services (SSIS)
  • SQL Server συνδεδεμένους διακομιστές
  • Ερωτήματα SQL Server κατανεμημένων
  • Αντικείμενα δεδομένων ActiveX (ADO) και την υπηρεσία παροχής Microsoft OLE DB για SQL Server
  • Το ADO και την υπηρεσία παροχής Microsoft OLE DB για Jet 4.0

Απαιτήσεις

Η ακόλουθη λίστα περιγράφει το υλικού που συνιστώνται, λογισμικό, υποδομή δικτύου και τα service pack που απαιτούνται:
  • Διαθέσιμες παρουσία του Microsoft SQL Server 7.0 ή Microsoft SQL Server 2000 ή Microsoft SQL Server 2005
  • Microsoft Visual Basic 6.0 για δείγματα ADO που θα χρησιμοποιήσετε τη Visual Basic
Τμήματα αυτού του άρθρου προϋποθέτουν ότι είστε εξοικειωμένοι με τα ακόλουθα θέματα:
  • Υπηρεσίες μετασχηματισμού δεδομένων
  • Συνδεδεμένους διακομιστές και κατανεμημένα ερωτήματα
  • Ανάπτυξη ADO σε Visual Basic

Δείγματα

Εισαγωγή και προσάρτηση

Τα δείγματα προτάσεων SQL που χρησιμοποιείται σε αυτό το άρθρο παρουσιάζουν ερωτήματα δημιουργίας πίνακα που εισαγάγετε δεδομένα του Excel σε ένα νέο πίνακα του SQL Server, χρησιμοποιώντας την ΕΠΙΛΟΓΉ...ΣΕ...ΑΠΌ τη σύνταξη. Μπορείτε να μετατρέψετε αυτές τις προτάσεις σε ερωτήματα προσάρτησης, χρησιμοποιώντας INSERT INTO...ΕΠΙΛΈΞΤΕ...ΑΠΌ σύνταξη ενώ εξακολουθούν να αναφέρουν αντικείμενα προέλευσης και προορισμού, όπως φαίνεται σε αυτά τα δείγματα κώδικα.

Χρήση DTS ή SSIS

Μπορείτε να χρησιμοποιήσετε τον Οδηγό εισαγωγής SQL Server δεδομένων Transformation Services (DTS) ή την εισαγωγή του SQL Server και οι "Οδηγό εξαγωγής" για να εισαγάγετε δεδομένα του Excel σε πίνακες του SQL Server. Όταν βήματα του οδηγού και επιλέγοντας τους πίνακες προέλευσης του Excel, να θυμάστε ότι τα ονόματα αντικειμένων Excel που προσαρτώνται με ένα σύμβολο δολαρίου ($) αντιπροσωπεύουν φύλλα εργασίας (για παράδειγμα, $ Φύλλο1) και ότι τα ονόματα απλών αντικειμένων χωρίς το σύμβολο του δολαρίου αντιπροσωπεύουν Excel συγκεκριμένες περιοχές.

Χρησιμοποιήστε ένα συνδεδεμένο διακομιστή

Για να απλοποιήσετε ερωτήματα, μπορείτε να ρυθμίσετε ένα βιβλίο εργασίας του Excel ως ένα συνδεδεμένο διακομιστή SQL Server.Για πρόσθετες πληροφορίες, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
306397  (http://support.microsoft.com/kb/306397/EN-US/ ) ΔΙΑΔΙΚΑΣΙΕΣ: Χρήση Excel με SQL Server συνδεδεμένους διακομιστές και κατανεμημένων ερωτημάτων
Ο παρακάτω κώδικας εισάγει τα δεδομένα από το φύλλο εργασίας πελάτες στο Excel συνδεδεμένο διακομιστή "EXCELLINK" σε ένα νέο πίνακα του SQL Server με όνομα XLImport1:
SELECT * INTO XLImport1 FROM EXCELLINK...[Customers$]
				
Μπορείτε επίσης να εκτελέσετε το ερώτημα σε σχέση με το αρχείο προέλευσης με ένα τρόπο διέλευσης χρησιμοποιώντας OPENQUERY ως εξής:
SELECT * INTO XLImport2 FROM OPENQUERY(EXCELLINK,
    'SELECT * FROM [Customers$]')
				

Χρήση κατανεμημένων ερωτημάτων

Εάν δεν θέλετε να ρυθμίσετε μια μόνιμη σύνδεση στο βιβλίο εργασίας του Excel ως ένα συνδεδεμένο διακομιστή, μπορείτε να εισαγάγετε δεδομένα για συγκεκριμένο σκοπό, χρησιμοποιώντας το OPENDATASOURCE ή τη συνάρτηση OPENROWSET. Τα ακόλουθα δείγματα κώδικα επίσης εισάγουν τα δεδομένα από το φύλλο εργασίας Excel πελάτες στους νέους πίνακες του 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$]')
				

Χρησιμοποιήστε το ADO και SQLOLEDB

Όταν είστε συνδεδεμένοι στο διακομιστή SQL σε μια εφαρμογή του ADO με χρήση του Microsoft OLE DB για SQL Server (SQLOLEDB), μπορείτε να χρησιμοποιήσετε την ίδια σύνταξη "κατανεμημένο ερωτήματος" από το Χρήση κατανεμημένων ερωτημάτων ενότητα για την εισαγωγή δεδομένων του Excel στο SQL Server.

Το ακόλουθο δείγμα κώδικα Visual Basic 6.0 απαιτεί να προσθέσετε μια αναφορά έργου για το ActiveX Data Objects (ADO). Αυτό το δείγμα κώδικα δείχνει επίσης πώς να χρησιμοποιείτε OPENDATASOURCE και OPENROWSET μέσω μιας σύνδεσης 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
				

Χρησιμοποιήστε το ADO και την υπηρεσία παροχής Jet

Το δείγμα στην προηγούμενη ενότητα χρησιμοποιεί ADO με την υπηρεσία παροχής SQLOLEDB για να συνδεθείτε με τον προορισμό της εισαγωγής Excel-SQL. Μπορείτε επίσης να χρησιμοποιήσετε την υπηρεσία παροχής OLE DB για Jet 4.0 για να συνδεθείτε με το αρχείο προέλευσης του Excel.

Ο μηχανισμός Jet database μπορεί να παραπέμπει σε εξωτερικές βάσεις δεδομένων σε προτάσεις SQL χρησιμοποιώντας μια ειδική σύνταξη που διαθέτει τρεις διαφορετικές μορφές:
  • [Πλήρης διαδρομή για τη βάση δεδομένων της Microsoft Access].[Όνομα πίνακα]
  • [Όνομα ISAM;ISAM συμβολοσειρά σύνδεσης].[Όνομα πίνακα]
  • [ODBC;Συμβολοσειρά σύνδεσης ODBC].[Όνομα πίνακα]
Η ενότητα αυτή χρησιμοποιεί την τρίτη μορφή για να δημιουργήσετε μια σύνδεση ODBC σε βάση δεδομένων SQL Server προορισμού. Μπορείτε να χρησιμοποιήσετε ένα όνομα αρχείου προέλευσης δεδομένων ODBC (DSN) ή μια ακολουθία χαρακτήρων σύνδεσης χωρίς DSN:
DSN:
    [odbc;DSN=<DSN name>;UID=<user>;PWD=<password>]

DSN-less:
   [odbc;Driver={SQL Server};Server=<server>;Database=<database>;
       UID=<user>;PWD=<password>]
				
Το ακόλουθο δείγμα κώδικα Visual Basic 6.0 απαιτεί να προσθέσετε μια αναφορά έργου στο ADO. Αυτό το δείγμα κώδικα δείχνει πώς να εισαγάγετε δεδομένα του Excel με SQL Server μέσω μιας σύνδεσης ADO, χρησιμοποιώντας την υπηρεσία παροχής 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
				
Μπορείτε επίσης να χρησιμοποιήσετε αυτήν τη σύνταξη, που υποστηρίζει την υπηρεσία παροχής Jet, για να εισαγάγετε δεδομένα του Excel σε άλλες βάσεις δεδομένων της Microsoft Access, βάσεις δεδομένων ("επιφάνεια εργασίας") method (ISAM) με ευρετήριο σειριακή πρόσβαση ή βάσεις δεδομένων ODBC.

Αντιμετώπιση προβλημάτων

  • Να θυμάστε ότι τα ονόματα αντικειμένων Excel που προσαρτώνται με ένα σύμβολο δολαρίου ($) αντιπροσωπεύουν φύλλα εργασίας (για παράδειγμα, $ Φύλλο1) και ότι το απλό αντικείμενο ονόματα αντιπροσωπεύουν Excel συγκεκριμένες περιοχές.
  • Σε ορισμένες περιπτώσεις, ιδιαίτερα όταν καθορίζετε τα δεδομένα προέλευσης του Excel, χρησιμοποιώντας το όνομα του πίνακα αντί για ερώτημα ΕΠΙΛΟΓΉΣ, οι στήλες του πίνακα του SQL Server προορισμού ταξινομούνται με αλφαβητική σειρά.Για πρόσθετες πληροφορίες σχετικά με αυτό το πρόβλημα με την υπηρεσία παροχής Jet, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
    299484  (http://support.microsoft.com/kb/299484/EN-US/ ) PRB: Στήλες ταξινομούνται αλφαβητικά κατά τη χρήση του ADOX για ανάκτηση στηλών πίνακα της Access
  • Όταν η υπηρεσία παροχής Jet προσδιορίζει ότι μια στήλη Excel περιέχει μεικτό κείμενο και αριθμητικών δεδομένων, την υπηρεσία παροχής Jet επιλέγει τον τύπο δεδομένων "πλειοψηφία" και επιστρέφει τιμές που δεν ταιριάζουν με τιμές null.Για πρόσθετες πληροφορίες σχετικά με τον τρόπο για να επιλύσετε αυτό το ζήτημα, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
    194124  (http://support.microsoft.com/kb/194124/EN-US/ ) PRB: Excel τιμές επιστρέφονται ως NULL χρησιμοποιώντας DAO OpenRecordset

Αναφορές

Για πρόσθετες πληροφορίες σχετικά με τον τρόπο χρήσης του Excel ως αρχείο προέλευσης δεδομένων, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
257819  (http://support.microsoft.com/kb/257819/EN-US/ ) ΔΙΑΔΙΚΑΣΙΕΣ: Χρήση του ADO με δεδομένα του Excel από τη Visual Basic ή VBA
Για πρόσθετες πληροφορίες σχετικά με τον τρόπο μεταφοράς δεδομένων στο Excel, κάντε κλικ στους αριθμούς των άρθρων παρακάτω, για να προβάλετε τα άρθρα της Γνωσιακής Βάσης της Microsoft:
295646  (http://support.microsoft.com/kb/295646/EN-US/ ) ΔΙΑΔΙΚΑΣΙΕΣ: Μεταφορά δεδομένων από το αρχείο προέλευσης δεδομένων ADO στο Excel με ADO
247412  (http://support.microsoft.com/kb/247412/EN-US/ ) ΠΛΗΡΟΦΟΡΙΕΣ: Μέθοδοι για τη μεταφορά δεδομένων στο Excel από τη Visual Basic
246335  (http://support.microsoft.com/kb/246335/EN-US/ ) ΔΙΑΔΙΚΑΣΙΕΣ: Μεταφορά δεδομένων από μια ομάδα εγγραφών ADO στο Excel με αυτοματοποίηση
319951  (http://support.microsoft.com/kb/319951/EN-US/ ) ΤΡΌΠΟΣ: Υπηρεσίες μεταφοράς δεδομένων στο Excel, χρησιμοποιώντας το μετασχηματισμό δεδομένων διακομιστή SQL
306125  (http://support.microsoft.com/kb/306125/EN-US/ ) ΤΡΌΠΟΣ: Εισαγωγή δεδομένων από το SQL Server στο Microsoft Excel

Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • 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
Λέξεις-κλειδιά: 
kbhowtomaster kbjet kbmt KB321686 KbMtel
Μηχανικά μεταφρασμένοΜηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:321686  (http://support.microsoft.com/kb/321686/en-us/ )