Announcement

Collapse
No announcement yet.

Excel-Dateien mit MS SQL Server importieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Excel-Dateien mit MS SQL Server importieren

    Hallo,
    in der MS_Hilfe-Bibliothek hab ich folgende Möglichkeit gefunden, Daten aus Excel in eine SQL Server 2005-Datenbank zu importieren:

    select * into TEMP_TABELLE from opendatasource
    ('microsoft.Jet.OLEDB.4.0','Data Source=D:\XXXXXUpload\Datafields to Entities .xls; Extended properties = Excel 8.0')...[Bonus for 2007$]

    Die Fehlermeldung lautet:
    Msg 7314, Level 16, State 1, Line 1
    The OLE DB provider "microsoft.Jet.OLEDB.4.0" for linked server "(null)" does not contain the table "Bonus for 2007$". The table either does not exist or the current user does not have permissions on that table.

    Die Excel-Datei selbst ist nicht schreib- oder Password-geschützt.Ich hab dann versucht, über den Objekt-Explorer einen "linked server" einzurichten, aber ist das eigentlich notwendig, wenn die Quelle und das Ziel auf einem Rechner liegen ? Auf jeden Fall bin ich mit dem "linked server"-Einrichten auch nicht weiter gekommen...

    TITEL: Microsoft SQL Server Management Studio
    ------------------------------

    "Fehler bei der Testverbindung mit dem Verbindungsserver."

    ------------------------------
    ZUSÄTZLICHE INFORMATIONEN:

    Ausnahme beim Ausführen einer Transact-SQL-Anweisung oder eines Transact-SQL-Batches. (Microsoft.SqlServer.ConnectionInfo)

    ------------------------------

    The OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "ExcelSource" reported an error. The provider did not give any information about the error.
    Cannot initialize the data source object of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "ExcelSource". (Microsoft SQL Server, Fehler: 7399)

    Hilfe erhalten Sie durch Klicken auf: http://go.microsoft.com/fwlink?ProdN...9&LinkId=20476

    ------------------------------
    SCHALTFLÄCHEN:

    OK
    ------------------------------

    Kann mir jemand weiterhelfen - das wäre sehr freundlich und würde mir das leben doch sehr erleichtern.

    Gruß,
    canacru

  • #2
    Hallo,

    in meinem SQL Server 2005-Buch habe ich für den Zugriff auf eine Excel 2003-Tabelle die Funktion OPENROWSET genutzt, um einen Join mit einer MSSQL-Tabelle auszuführen:

    Code:
    SELECT p.persnr, p.nachname, e.Zusatzinfo
    FROM Personal p
      JOIN OPENROWSET('MSDASQL', 
        'Driver=Microsoft Excel-Treiber (*.xls);DBQ=C:\Temp\PersonalMappe.xls', 
        'SELECT * FROM [PersonalExcel$]') e 
        ON p.persnr = e.persnr;
    Dabei wird der ODBC-Treiber verwendet, den Microsoft Office 2003 installiert.

    Comment


    • #3
      Hallo Herr Kosch,
      ihr Hinweis hat nur bedingt geholfen, denn auch ihr Vorschlag hat wie mein Beispiel die gleiche Fehlermeldung geliefert. Diese Fehlermeldung aber konnte ich im Internet aufspüren und zwar unter http://sql-und-xml.de/sql-praxis/leg...er-system.html, wo ein Bug beschrieben steht, der die Ursache ausgemacht haben könnte.
      Auf jeden Fall haben wir die dort am Ende beschriebenen Schritte befolgt und nach etwas herumtüffeln am Syntax hat es dann auf beide Arten funktioniert.

      Was mir jetzt noch fehlt, ist eine Lösung für die Zellenreferenzierung, wenn ich einen Bereich zwischen den Zellen A7 und V524 als Eingabe bestimmen möchte.
      Was nicht funktioniert ist:
      a.) [Bonusfor2007$A7:V524] oder auch
      b.) [Bonusfor2007$!A7:V524].

      Vielleicht wissen hier Sie ja hierzu auch einen Rat. Hintergrund ist der, dass ich unnötige Zeilen eleminieren möchte...

      Gruß,
      canacru

      Comment


      • #4
        Hallo,

        ein bestimmter Bereich eines Excel-Arbeitsblattes kann über das Menü Einfügen | Namen | Definieren... mit einem eindeutigen Namen für den Datenbereich versehen werden. Der Name dieses Datenbereichs ist beim Zugriff über ADO.NET der Tabellenname.

        Comment


        • #5
          Hallo,
          erst einmal Danke schön für den Tipp, aber leider führt mich ihr Vorschlag nicht in die gewünschte Richtung, da ich Automatisieren möchte und mein Problem nicht durch weitere manuelle Tätigkeiten lösen.
          Gibt es nicht eine Möglichkeit, einen definierten Bereich direkt anzuführen ?
          Oder habe ich etwas an ihre Lösung nicht verstanden ?

          Gruß,
          canacru

          Comment

          Working...
          X